PowerPoint プレゼンテーション

Similar documents
PowerPoint プレゼンテーション

コンピュータグラフィックス第6回

モデリングとは

8. 自由曲線と曲面の概要 陽関数 陰関数 f x f x x y y y f f x y z g x y z パラメータ表現された 次元曲線 パラメータ表現は xyx 毎のパラメータによる陽関数表現 形状普遍性 座標独立性 曲線上の点を直接に計算可能 多価の曲線も表現可能 gx 低次の多項式は 計

イントロダクション

演算増幅器

コンピュータグラフィックス第8回

Fair Curve and Surface Design System Using Tangent Control

コンピューターグラフィックスS

Microsoft PowerPoint - info_eng3_05ppt.pptx

Microsoft Word - gnuplot

例題1 転がり摩擦

コンピュータグラフィックス基礎              No

Computer Graphics

memo

計算機シミュレーション

スライド 1

Microsoft PowerPoint - Salome-Meca.pptx

Microsoft PowerPoint - [150428] CMP実習Ⅰ(2015) 橋本 CG編 第2回 ベジエ曲線とフラクタル.pptx

謗域・ュ逕ィppt

コンピュータグラフィックスS 演習資料

Microsoft PowerPoint - 講義資料-mlib

Microsoft Word - Grspes…~…j…}…j…–…A…‰6.0.doc

Java 基礎問題ドリル ~ メソッドを理解する ~ 次のプログラムコードに 各設問の条件にあうメソッドを追加しなさい その後 そのメソッドが正しく動作することを検証するためのプログラムコードを main メソッドの中に追加しなさい public class Practice { // ここに各設問

PP(tt) = (1 tt) qq 0 +(1 tt) tt qq 1 +(1 tt) tt qq + tt qq (0 ttt1) ここで制御点 qq 0 = (1,1), qq 1 = (,4), qq = (,4), qq = (,1) から定まるベジェ曲線を PP(tt) とし制御点 qq

memo

医用工学概論  Medical Engineering (ME)   3年前期の医用工学概論実習と 合わせ、 医療の現場で使用されている 医用機器を正しく安全に使用するために必要な医用工学(ME)の 基礎知識を習得する。

コンピュータグラフィックスS 演習資料

tc15_tutorial02

コンピューターグラフィックスS

PowerPoint プレゼンテーション

第3章 OpenGL の基礎

第3章 OpenGL の基礎

CG

情報工学実験 Ⅱ グラフィックプログラミング基礎 担当教員名 : 赤嶺有平 提出日 :2010 年 12 月 9 日 学籍番号 : B 氏名 : 大城佳明 - 1 -

Microsoft Word - CGP_GM

問 1 図 1 の図形を作るプログラムを作成せよ 但し ウィンドウの大きさは と し 座標の関係は図 2 に示すものとする 図 1 作成する図形 原点 (0,0) (280,0) (80,0) (180,0) (260,0) (380,0) (0,160) 図 2 座標関係 問 2

2014年度 筑波大・理系数学

4 月 東京都立蔵前工業高等学校平成 30 年度教科 ( 工業 ) 科目 ( プログラミング技術 ) 年間授業計画 教科 :( 工業 ) 科目 :( プログラミング技術 ) 単位数 : 2 単位 対象学年組 :( 第 3 学年電気科 ) 教科担当者 :( 高橋寛 三枝明夫 ) 使用教科書 :( プロ

ToDo: 今回のタイトル

PowerPoint Presentation

重要例題113

(Microsoft PowerPoint -

謗域・ュ逕ィppt

第7章 レンダリング

第7章 レンダリング

初めてのプログラミング

<907D945D F D C789C195CF8D5888EA97978CF68A4A97702E786C7378>

第 2 回 Maya の基礎 2011 年度春学期火曜日 4 時限目 λ18 教室デザイン戦略 ( コンピュータアニメーション ) 担当 : 中村太戯留 Maya の基本操作 [ メインメニュー ] [ ステータスライン ] [ シェルフ ] [ ツールボックス ] [ チャンネルボックス ] [

スライド 1

このデータは ダイアモンドの価格 ( 価格 ) に対する 評価の影響を調べるために収集されたものです 影響と考えられるものは カラット重量 カラー クラリティー 深さ テーブル径 カット 鑑定機関 の 7 つになります 特に カラット重量 カラー クラリティー カット は 4C と呼ばれ ダイヤモン

PowerPoint Presentation

Microsoft PowerPoint - 応用数学8回目.pptx

座標軸以外の直線のまわりの回転体の体積 ( バウムクーヘン分割公式 ) の問題の解答 立体の体積の求め方 図 1 の立体の体積 V を求める方法を考えてみる 図 1 図 1 のように 軸の から までの長さを 等分する そして とおく とすると となる 図 1 のように のときの 軸に垂直な平面 に

座標系.rtf

0 21 カラー反射率 slope aspect 図 2.9: 復元結果例 2.4 画像生成技術としての計算フォトグラフィ 3 次元情報を復元することにより, 画像生成 ( レンダリング ) に応用することが可能である. 近年, コンピュータにより, カメラで直接得られない画像を生成する技術分野が生

Microsoft PowerPoint Java基本技術PrintOut.ppt [互換モード]

OpenGL & GLUTの基本関数の説明

libaux.dvi

vecrot

情報工学実験Ⅲ

デザイン戦略(コンピュータアニメーション) 2013年度春学期

フレーム ページの作り方 那須シニアネット三宅節雄 今回は那須シニアネットのホームページと同様に 1バナーとホームページのタイトルなどを入れた top.html 2スライドショーなど構成するページの名前の一覧から各ページへリンクさせた menu.html 3 取り敢えず表紙を飾った main.htm

助成研究者紹介 たなかしげのり 田中成典 現職 : 関西大学総合情報学部教授 ( 博士 ( 工学 )) 主な著書 論文 : 3 次元関連 デジカメ活用によるデジタル測量入門 ( 森北出版, 平成 12 年 ). DirectX8 & VC++ -3D の基礎とゲームの作り方 -( 工学社, 平成 1

Microsoft PowerPoint - 11.pptx

7 ポインタ (P.61) ポインタを使うと, メモリ上のデータを直接操作することができる. 例えばデータの変更 やコピーなどが簡単にできる. また処理が高速になる. 7.1 ポインタの概念 変数を次のように宣言すると, int num; メモリにその領域が確保される. 仮にその開始のアドレスを 1

関数の定義域を制限する 関数のコマンドを入力バーに打つことにより 関数の定義域を制限することが出来ます Function[ < 関数 >, <x の開始値 >, <x の終了値 > ] 例えば f(x) = x 2 2x + 1 ( 1 < x < 4) のグラフを描くには Function[ x^

Graphics with Processing モデリング 塩澤秀和 1

2018年度 東京大・理系数学

Chap3.key

補足 中学で学習したフレミング左手の法則 ( 電 磁 力 ) と関連付けると覚えやすい 電磁力は電流と磁界の外積で表される 力 F 磁 電磁力 F li 右ねじの回転の向き電 li ( l は導線の長さ ) 補足 有向線分とベクトル有向線分 : 矢印の位

PowerPoint プレゼンテーション

条件付き書式 の ルールの管理 をクリック 2 新規ルール をクリック 1 ルール の管理をクリック 3 指定の値を含むセルだけ書式設定 を クリック 7 グレーを選び OK をクリック 4 次の値に等しい を選ぶ 5 2 と入力 6 書式をクリック 8OK をクリック 以下同様に 新規ルール をク

Microsoft PowerPoint - ロボットの運動学forUpload'C5Q [互換モード]

Microsoft PowerPoint - OOP.pptx

Microsoft PowerPoint 電子情報理工学特論.pptx

p tn tn したがって, 点 の 座標は p p tn tn tn また, 直線 l と直線 p の交点 の 座標は p p tn p tn よって, 点 の座標 (, ) は p p, tn tn と表され p 4p p 4p 4p tn tn tn より, 点 は放物線 4 p 上を動くこと

Microsoft Word - 92.doc

Microsoft Word - 表計算ソフトの練習.doc

02: 変数と標準入出力

Kageyama (Kobe Univ.) / 36

スライド 1

基本作図・編集

謗域・ュ逕ィppt

Microsoft Word - thesis.doc

02: 変数と標準入出力

Microsoft Word - BouncingBall.doc

-2-

2018年度 岡山大・理系数学

目次 1. 図郭のCSVから矩形シェープファイル保存... i 1.1. 変換元のCSVファイル... i 1.2. ダイアログ... i 1.3. 作成するシェープファイル... ii 2. 図郭 TIN DEM 保存 ダイアログ TINについて... 3

問 題

線を描く 線ツールをクリックする 原点 ( 青 緑 赤の 3 つの軸が交わるところ ) をクリックする 水平方向 ( 赤い軸と緑の軸がある面 ) にカーソルを動かしクリックする 原点とクリックした点の間に黒い線が描画される 垂直方向にカーソルを動かす 青い線が表示され 青い軸上 と表示される 青い線

3Dプリンタ用CADソフト Autodesk Meshmixer入門編[日本語版]

2017年度 長崎大・医系数学

Learning Autodesk 3ds max 2014 in Classroom Training workbook learning Autodesk 3ds max 2014 in Classroom 基礎コース Maruhan Co.Ltd.2013 第三者へのトレーニングやセミナー等実

レコード class Point attr_accessor("x", "y") インスタンス変数の宣言 point.rb

2015年度 岡山大・理系数学

数学 Ⅲ 無限等比級数の問題解答 問 1 次の無限級数の和を求めよ (1) (5) (2) (6) (7) (3) ( 解 )(1) 初項 < 公比 < の無限等比級数より収束し (4) (2) (3) その和は ( 答 ) であるから 初項 < 公比 となっている よって 収束し その和は よって

基本作図・編集

目次 Ⅰ. はじめに P.2 Ⅱ. 作業手順 P.3 Ⅲ. 画面説明 P.4 Ⅳ. 単位とグリッドの設定 P.5 Ⅴ. 基板外形作図 P.6 Ⅵ. ランド作成 P.11 Ⅶ. 配線 P.16 Ⅷ. 輪郭線抽出 P.21 Ⅸ. 外形加工線抽出 P.24 Ⅹ. いろいろな作図機能 P.27 Ⅺ. いろい

Transcription:

複雑系科学演習 1 コンピュータグラフィックス 担当畔上秀幸情報科学研究科複雑系科学専攻

今日の話題 ベジェ曲線 曲面の描画 lesson9_1.c( ベジェ曲線 ) lesson9_2.c( 色付きベジェ曲線 ) lesson9_3.c( ベジェ曲面 ) NURBS 曲線 曲面の描画 lesson9_4.c(nurbs 曲線 ) lesson9_5.c(nurbs 曲線の分割 ) lesson9_6.c(nurbs 曲面 ) lesson9_7.c(2 次曲面 : 球, 円柱, 円盤 )

lesson9_1.c ベジェ曲線を描画する. 1. 制御点の決定 (ctrlpoint[4][3]) 2. 1 次元エバリュエータの定義 (glmap1f) 3. 頂点を算出 (glevalcoord1f) 2 4 3 1

lesson9_1.c(cont.) 制御点 ( コントロールポイント ) 25 行目から /* 制御点 */ /* x y z */ static GLfloat ctrlpoint[4][3] = {{-1.5, -1.8, 0.0}, /* 左下 */ {-0.9, 1.3, 0.0}, /* 左上 */ { 0.5, -1.0, 0.0}, /* 右下 */ { 1.9, 1.5, 0.0}}; /* 右上 */ 制御点を移動してみる. lesson9_1.c では無理ベジェ曲線になっているので重みは制御できない.

lesson9_1.c(cont.) 1 次元エバリュエータの定義 void glmap1{fd}(glenum target, TYPE u1, TYPE u2, GLint stride, GLint order, const TYPE *points) 例 : glmap1f(gl_map1_vertex_3, 0.0, 1.0, 3, 4, &ctrlpoint[0][0]); target: 制御点 points の表す内容 GL_MAP1_VERTEX_3 x,y,zの頂点座標 GL_MAP1_VERTEX_4 x,y,z,wの頂点座標 GL_MAP1_COLOR_4 R,G,B,A u1,u2: 変数 u の範囲を示す. 通常 0.0 と 1.0 にする stride: 制御点間のデータの増分値. 今の場合, 制御点 1 つに付き,GLfloat3 つ分 (x,y,z) なので 3. order: 曲線の次数 +1 points: 制御点データへのポインタ

lesson9_1.c(cont.) 頂点の算出 115 行目から /* ベジェ曲線 */ gldisable(gl_lighting); /* 線, 点を描画する時はライト OFF */ glenable(gl_map1_vertex_3); glcolor3f(r(32), G(165), B(237)); glbegin(gl_line_strip); for(ii1=0; ii1<=30; ii1++){ } glend(); glevalcoord1f((glfloat)ii1/30.0); gldisable(gl_map1_vertex_3); 領域座標値 0.0~1.0 の範囲で分割した値を指定していく. これが頂点となる. 分割数を小さくすると角張ってくる.

lesson9_1.c(cont.) 126 行目から /* 制御点 ( 黄色 ) */ gldisable(gl_lighting); /* 線, 点を描画する時はライト OFF */ glcolor3f(r(255), G(255), B(0)); glpointsize(5.0); glbegin(gl_points); for(ii1=0; ii1<4; ii1++){ glvertex3fv(ctrlpoint[ii1]); } glend(); const GLfloat v[3] と同じと考える. glvertex3fv(const GLfloat *v) glvertex3f(1.0, 2.0, 3.0); という使い方をしてきた. glvertex3f(ctrlpoint[0][0], ctrlpoint[0][1], ctrlpoint[0][2]); と書いてもいいが, GLfloat point[3]={1.0, 2.0, 3.0}; で座標を定義した時は glvertex3fv(point); GLfloat ctrlpoint[4][3] の時は glvertex3fv(ctrlpoint[0]); glvertex3fv(ctrlpoint[1]);

lesson9_2.c ベジェ曲線に色をつける. 30 行目から 63 行目から static GLfloat colorpoint[4][4] = {{1.0, 0.0, 0.0, 1.0}, /* 左下 */ /* 1 次元エバリュエータ */ {0.0, 1.0, 0.0, 1.0}, /* 左上 */ {0.0, 1.0, 0.0, 1.0}, /* 右下 */ {0.0, 0.0, 1.0, 1.0}}; /* 右上 */ glmap1f(gl_map1_vertex_3, 0.0, 1.0, 3, 4, &ctrlpoint[0][0]); glmap1f(gl_map1_color_4, 0.0, 1.0, 4, 4, &colorpoint[0][0]);

lesson9_2.c(cont.) 121 行目から /* ベジェ曲線 */ gldisable(gl_lighting); /* 線, 点を描画する時はライトOFF */ glenable(gl_map1_vertex_3); glenable(gl_map1_color_4); gllinewidth(2.0); glbegin(gl_line_strip); for(ii1=0; ii1<=30; ii1++){ glevalcoord1f((glfloat)ii1/30.0); } glend(); gldisable(gl_map1_color_4); gldisable(gl_map1_vertex_3);

lesson9_3.c ベジェ曲面を描画する. ベジェ曲線とほとんど同じ 1. 制御点の決定 (ctrlpoint[4][4][3]) 2. 1 次元エバリュエータの定義 (glmap2f) 3. 頂点を算出 (glevalcoord2f)

lesson9_3.c(cont.) 制御点 ( コントロールポイント ) 25 行目から static GLfloat ctrlpoint[4][4][3] = { {{-2.0, 2.0, -2.0},{-0.7, -1.0, -2.0},{0.7, -1.0, -2.0},{2.0, 2.0, -2.0}}, {{-1.7, 1.0, -1.0},{-1.0, -0.5, -1.0},{1.0, -0.5, -1.0},{1.7, 1.0, -1.0}}, {{-1.4, -1.0, 1.0},{-1.3, 0.5, 1.0},{1.3, 0.5, 1.0},{1.4, -1.0, 1.0}}, {{-1.0, -2.0, 2.0},{-1.6, 1.0, 2.0},{1.6, 1.0, 2.0},{1.0, -2.0, 2.0}}}; 上方から見た図

lesson9_3.c(cont.) 2 次元エバリュエータの定義 void glmap2{fd}(glenum target, TYPE u1, TYPE u2, GLint ustride, GLint uorder, TYPE v1, TYPE v2, GLint vstride, GLint vorder, const TYPE *points) 例 : glmap2f(gl_map2_vertex_3, 0.0, 1.0, 3*4, 4, 0.0, 1.0, 3, 4, &ctrlpoint[0][0][0]); target: 制御点 pointsの表す内容 GL_MAP2_VERTEX_3 x,y,zの頂点座標 GL_MAP2_VERTEX_4 x,y,z,wの頂点座標 GL_MAP2_COLOR_4 R,G,B,A u1,u2,v1,v2: 変数 u,v の範囲を示す. 通常 0.0 と 1.0 にする. ustride, vstride: 制御点間のデータの増分値 uorder,vorder: 曲線の次数 +1 points: 制御点データへのポインタ

lesson9_3.c(cont.) ustride, vstride の意味 例 : glmap2f(gl_map2_vertex_3, 0.0, 1.0, 3*4, 4, 0.0, 1.0, 3, 4, &ctrlpoint[0][0][0]); m*nの制御点配列 m v u n 制御点配列は大きな配列の一部分を使うこともできる. そのために {u,v}strideを指定する必要がある. ustrideは次の行までのデータ量を示す. 左図の点線が示すデータ量 ustride=3xn つまり,v 方向に1 移動する量 vstrideはu 方向に1 移動する量 よって vstride=3 制御点一つ分 (ctrlpoint[3]={x,y,z}) = ctrlpoint[4][4][3]

lesson9_3.c(cont.) 116 行目から /* ベジェ曲面 */ glcolor3f(r(32), G(165), B(237)); gldisable(gl_lighting); /* 線, 点を描画する時はライトOFF */ glenable(gl_map2_vertex_3); gllinewidth(2.0); for(ii1=0; ii1<=20; ii1++){ #if 0 glbegin(gl_line_strip); for(ii2=0; ii2<=30; ii2++){ glevalcoord2f((glfloat)ii2/30.0, (GLfloat)ii1/20.0); } glend(); #endif #if 1 glbegin(gl_line_strip); for(ii2=0; ii2<=30; ii2++){ glevalcoord2f((glfloat)ii1/20.0, (GLfloat)ii2/30.0); } glend(); #endif } ポリゴンで表示するように変更してみる.

lesson9_4.c NURBS 曲線を描画する. 制御点の決定 (ctrlpoint[4][3]) NURBS 曲線を描画するための設定 NURBS オブジェクトの生成 各種設定 ノットベクトルの定義 NURBS 曲線の描画

lesson9_4.c(cont.) 制御点の重みを変えてみる. static GLfloat ctrlpoint[4][4] = {{-1.5, -1.8, 0.0, 1.0}, /* 左下 */ {-0.9, 1.3, 0.0, 1.0}, /* 左上 */ { 0.9, -1.0, 0.0, 1.0}, /* 右下 */ { 1.9, 1.5, 0.0, 1.0}}; /* 右上 */ この行の数値を何倍かしてみる.

lesson9_4.c(cont.) NURBS オブジェクトの生成 25 行目から 61 行目から static GLUnurbsObj *NurbsObj; NurbsObj = glunewnurbsrenderer(); /* NURBS オブジェクトを作る */ 各種設定 62 行目から glunurbsproperty(nurbsobj, GLU_SAMPLING_TOLERANCE, 25.0);/* サンプリング数 */

lesson9_4.c(cont.) ノットベクトルの定義 96 行目から GLfloat knots[] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; /* * knots : B-Spline 関数におけるノットベクトル * * Berstein 関数の場合 * knots[] = {0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 1.0, 1.0}; * * 一様 B-spline 関数の場合 * knots[] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0}; * * 非一様 B-spline 関数の場合 (NURBS) * knots[] = {0.0, 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 5.0}; */

lesson9_4.c(cont.) NURBS 曲線の描画 131 行目から /* NURBS 曲線 */ glcolor3f(r(32), G(165), B(237)); gldisable(gl_lighting); /* 線, 点を描画する時はライトOFF */ glubegincurve(nurbsobj); glunurbscurve(nurbsobj, 8, knots, 4, &ctrlpoint[0][0], 4, GL_MAP1_VERTEX_4); gluendcurve(nurbsobj);

lesson9_4.c(cont.) NURBS 曲線の定義 void glunurbscurve(glunurbsobj *nobj, GLint uknot_count, GLfloat *uknot, GLint u_stride, GLfloat *ctrarray, GLint uorder, GLenum type) 例 : glunurbscurve(nurbsobj, 8, knots, 4, &ctrlpoint[0][0], 4, GL_MAP1_VERTEX_4); uknot_count: ノットベクトルの数 uknot: ノットベクトルの配列 u_stride: 制御点間のデータの増分値. ctrarray: 制御点の配列 uorder: 曲線の次数 +1 type: エバリュエータ形式. 無理制御点ではGL_MAP1_VERTEX_3, 有理制御点では GL_MAP1_VERTEX_4を指定する. 制御点の数は, ノットベクトルの数から曲線の階数 (uorder) を引いて算出される.

lesson9_4.c(cont.) ノットベクトルの値を変えてみる. Berstein 関数の場合 一様 B-spline 関数の場合 非一様 B-spline 関数の場合

NURBS 曲線の分割 NURBS 曲線の分割の前に lesson9_5を実行した後に, 右下の図をPowerPoint 上で書いてみる. オートシェイプ 線 曲線 3 点クリックした後,Enterキー 曲線を選択し, 右クリック 頂点の編集 黒い点の上で右クリック 頂点で P 1 P 2 線分を伸ばす コントロールポイントを移動する. P 0 P 4 P 5 P 3

P 1 P 2 NURBS 曲線の分割 (cont.) NURBS 曲線の分割 制御点 6 個の 3 次 B-Spline 曲線を Q 点で分割する. 実際は Q 点ではなく, パラメータ t [0,1] の位置で分割する. 元の曲線形状を維持したままパラメータ t の位置で分割するには,t を次数分だけ多重化したノットベクトルをつくる. オスロアルゴリズム ( 参考文献 1 参照 ) まず, 元の曲線のノットベクトルが [0,0,0,0,t,t,1,1,1,1] であるとすると,t を追加すると [0,0,0,0,t,t,t,1,1,1,1] になる. B-Spline 曲線には次式の関係があることから, 制御点を一つ増やす必要がある. ( ノットの数 )=( 制御点の数 )+( 次数 +1) P 0 Q P 4 P 5 P 3

NURBS 曲線の分割 (cont.) オスロアルゴリズムによれば, 挿入された制御点は次式で求められる.( ただし, この曲線に限る.) Q = (1-t) P 2 + tp 3 lesson9_6.c では t = 0.7 としている. P 1 P 2 P 4 P 5 P 0 Q P 3

lesson9_5.c 制御点, ノットベクトルを既に設定しており,#if0,#endif で切り替えて眺める. 27 行目から static GLfloat ctrlpoint1[6][4]={ }; static GLfloat ctrlpoint2[7][4]={ }; static GLfloat ctrlpoint3[4][4]={ }; static GLfloat ctrlpoint4[4][4]={ }; 119 行目から GLfloat knots1[10] = {0.0, 0.0, 0.0, 0.0, 0.7, 0.7, 1.0, 1.0, 1.0, 1.0}; GLfloat knots2[11] = {0.0, 0.0, 0.0, 0.0, 0.7, 0.7, 0.7,1.0, 1.0, 1.0, 1.0}; GLfloat knots3[8] = {0.0, 0.0, 0.0, 0.0, 0.7, 0.7, 0.7, 0.7}; GLfloat knots4[8] = {0.7, 0.7, 0.7, 0.7, 1.0, 1.0, 1.0, 1.0}; 148 行目から #if 1 /* 初期状態 */ ctrlpoint1,knots1 使用 #endif #if 0 /* ノット, 制御点 Q 挿入 */ #endif #if 0 /* 分割 */ #endif ctrlpoint2,knots2 使用 ctrlpoint3, ctrlpoint4, knots3, knots4 使用

lesson9_6.c NURBS 曲面を描画する. 制御点の決定 (ctrlpoint[4][4][3]) NURBS 曲面を描画するための設定 NURBS オブジェクトの生成 各種設定 ノットベクトルの定義 NURBS 曲面の描画

lesson9_6.c(cont.) 制御点 59 行目から init_nurbs_ctrl_point() 関数内で設定 NURBS オブジェクトの生成 26 行目から static GLUnurbsObj *NurbsObj; 61 行目から NurbsObj = glunewnurbsrenderer(); /* NURBS オブジェクトを作る */ 各種設定 67 行目から /* 描画方法の設定 */ glunurbsproperty(nurbsobj, GLU_DISPLAY_MODE, GLU_FILL); /* glunurbsproperty(nurbsobj, GLU_DISPLAY_MODE, GLU_FILL); glunurbsproperty(nurbsobj, GLU_DISPLAY_MODE, GLU_OUTLINE_PATCH); glunurbsproperty(nurbsobj, GLU_DISPLAY_MODE, GLU_OUTLINE_POLYGON); */

lesson9_6.c(cont.) NURBS 曲面の定義 void glunurbscurve(glunurbsobj *nobj, GLint uknot_count, GLfloat *uknot, GLint vknot_count, GLfloat *uknot, GLint u_stride, GLint v_stride, GLfloat *ctrarray, GLint uorder, GLint vorder, GLenum type) 例 : glunurbssurface(nurbsobj, 8, knots, 8, knots, 4*3, 3, &ctrlpoint[0][0][0], 4, 4, GL_MAP2_VERTEX_3); uknot_count, vknot_count : ノットベクトルの数 uknot, vknot : ノットベクトルの配列 u_stride,v_stride : 制御点間のデータの増分値. ctrarray: 制御点の配列 uorder, vorder : 曲線の次数 +1 type: エバリュエータ形式. 無理制御点ではGL_MAP2_VERTEX_3, 有理制御点では GL_MAP2_VERTEX_4を指定する.

lesson9_7.c 2 次曲面 : 球, 円筒, 円盤 NURBS 曲面を描画する時と手順は似ている. 25 行目から static GLUquadricObj *qobj; 53 行目から /* 2 次曲面を描画するための設定 */ qobj = glunewquadric(); /* 2 次曲面オブジェクトを作る */ /* 描画方法の設定 */ gluquadricdrawstyle(qobj, GLU_FILL);

lesson9_7.c(cont.) 各種設定 /* 描画方法の設定 */ gluquadricdrawstyle(qobj, GLU_FILL); /* gluquadricdrawstyle(qobj, GLU_POINT); gluquadricdrawstyle(qobj, GLU_LINE); gluquadricdrawstyle(qobj, GLU_SILHOUETTE); gluquadricdrawstyle(qobj, GLU_FILL); */ /* 法線の設定 */ gluquadricorientation(qobj, GLU_OUTSIDE); /* gluquadricorientation(qobj, GLU_OUTSIDE); gluquadricorientation(qobj, GLU_INSIDE); */ /* 法線の計算方法の設定 */ gluquadricnormals(qobj, GLU_SMOOTH); /* gluquadricnormals(qobj, GLU_NONE); gluquadricnormals(qobj, GLU_FLAT); gluquadricnormals(qobj, GLU_SMOOTH); */

lesson9_7.c(cont.) 球 void glusphere( GLUquadric* quad, GLdouble radius,glint slices, GLint stacks ) radius: 球の半径 slices: z 軸回りの分割数 stacks: z 軸に沿った方向での分割数円筒 void glucylinder( GLUquadric* quad, GLdouble base, GLdouble top, GLdouble height, GLint slices, GLint stacks ) base: z=0 における円柱の半径 top: z=height における円柱の半径 height: 円柱の高さ slices: z 軸回りの分割数 stacks: z 軸沿いの分割数

lesson9_7.c(cont.) 円盤 void gludisk( GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops ) inner: 円盤の内径 (0 も可 ) outer: 円盤の外径 slices: z 軸回りの円周の分割数 loops: 円盤を分割する同心円の数. 中心は原点とする. 扇形 void glupartialdisk( GLUquadric* quad, GLdouble inner, GLdouble outer, GLint slices, GLint loops, GLdouble start, GLdouble sweep ) inner: 扇形の内径 (0 も可 ) outer: 扇形の外径 slices: z 軸回りの分割数 loops: 扇形を分割する原点回りの同心円の数 start: 扇形の開始角. 単位は度数. sweep: 扇形の内角. 単位は度数.

参考文献 1. 3 次元形状処理入門ー 3 次元 CG と CAD への基礎ー, 今野晃市著, サイエンス社,2003.