複雑系科学演習1 コンピュータグラフィックス

Similar documents
10 B 3. ( ) (3)

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

第3章 OpenGL の基礎

演算増幅器

謗域・ュ逕ィppt

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

第3章 OpenGL の基礎

スライド 1

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

untitled

Gmech08.dvi

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

Microsoft PowerPoint - 3D.ppt

PowerPoint Presentation

謗域・ュ逕ィppt

パソコンシミュレータの現状

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

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

Microsoft PowerPoint - 計算機言語 第7回.ppt

Microsoft PowerPoint - qcomp.ppt [互換モード]

Microsoft PowerPoint - 04.pptx

謗域・ュ逕ィppt

Microsoft PowerPoint - 11.pptx

Microsoft PowerPoint - info_eng3_05ppt.pptx

CG

モデリングとは

平成 年 月 7 日 ( 土 第 75 回数学教育実践研究会アスティ 45 ビル F セミナールーム A 札幌医科大学 年 P ab, を正の定数とする 平面上において ( a, を中心とする円 Q 4 C と (, b を中心とする円 C が 原点 O で外接している また P を円 C 上の点と

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

プログラミング実習I

vecrot

Microsoft PowerPoint - [150421] CMP実習Ⅰ(2015) 橋本 CG編 第1回 幾何変換.pptx

一方, 物体色 ( 色や光を反射して色刺激を起こすもの, つまり印刷物 ) の表現には, 減法混色 (CMY) が用いられる CMY の C はシアン (Cyn),M はマゼンタ (Mgent),Y はイエロー (Yellow) であり, これらは色の 3 原色と呼ばれるものである なお, 同じシア

Microsoft Word - thesis.doc

C#の基本

libaux.dvi

2 図微小要素の流体の流入出 方向の断面の流体の流入出の収支断面 Ⅰ から微小要素に流入出する流体の流量 Q 断面 Ⅰ は 以下のように定式化できる Q 断面 Ⅰ 流量 密度 流速 断面 Ⅰ の面積 微小要素の断面 Ⅰ から だけ移動した断面 Ⅱ を流入出する流体の流量 Q 断面 Ⅱ は以下のように

免許法認定公開講座: コンピュータグラフィックス

Microsoft Word - 92.doc

02: 変数と標準入出力

Part () () Γ Part ,

例 e 指数関数的に減衰する信号を h( a < + a a すると, それらのラプラス変換は, H ( ) { e } e インパルス応答が h( a < ( ただし a >, U( ) { } となるシステムにステップ信号 ( y( のラプラス変換 Y () は, Y ( ) H ( ) X (

02: 変数と標準入出力

Microsoft PowerPoint - H22制御工学I-10回.ppt

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

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

バイオプログラミング第 1 榊原康文 佐藤健吾 慶應義塾大学理工学部生命情報学科

PowerPoint プレゼンテーション

1 1.1 (VR) [1] * * /3/5 1

微分方程式 モデリングとシミュレーション

C プログラミング演習 1( 再 ) 2 講義では C プログラミングの基本を学び 演習では やや実践的なプログラミングを通して学ぶ

2018年度 東京大・理系数学

演算増幅器

2018年度 神戸大・理系数学

スライド 1

(iii) 0 V, x V, x + 0 = x. 0. (iv) x V, y V, x + y = 0., y x, y = x. (v) 1x = x. (vii) (α + β)x = αx + βx. (viii) (αβ)x = α(βx)., V, C.,,., (1)

断面の諸量

cp-7. 配列

CG

Microsoft PowerPoint - prog03.ppt

線形代数とは

簡単な図面を書いてみよう 『 3D編 』

FEM原理講座 (サンプルテキスト)

数学の世界

02: 変数と標準入出力

機構学 平面機構の運動学

Microsoft Word - no11.docx

学習指導要領

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

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

基本作図・編集

講習No.12

基本作図・編集

重要例題113

02: 変数と標準入出力

基本作図・編集

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

Microsoft PowerPoint - kougi7.ppt

PowerPoint プレゼンテーション

沼津工業高等専門学校

<907D945D F D C789C195CF8D5888EA97978CF68A4A97702E786C7378>

画像処理工学

ARToolKit プログラムの仕組み 1: ヘッダファイルのインクルード 2: Main 関数 3: Main Loop 関数 4: マウス入力処理関数 5: キーボード入力処理関数 6: 終了処理関数 3: Main Loop 関数 1カメラ画像の取得 2カメラ画像の描画 3マーカの検出と認識

(3) (2),,. ( 20) ( s200103) 0.7 x C,, x 2 + y 2 + ax = 0 a.. D,. D, y C, C (x, y) (y 0) C m. (2) D y = y(x) (x ± y 0), (x, y) D, m, m = 1., D. (x 2 y

3D の作図ツールについて 3D 画面を表示すると 以下の新しい作図ツールが表示されます より多くのオプションを見るためには ボタンの右下の小さな矢印 をクリックして下さい 28

(Microsoft PowerPoint - \221\34613\211\361)

gengo1-10

イントロダクション

スライド タイトルなし

Microsoft PowerPoint - H21生物計算化学2.ppt

Microsoft Word - povray.docx

ポインタ変数

<8D828D5A838A817C A77425F91E6318FCD2E6D6364>

Microsoft Word - 1B2011.doc

数値計算で学ぶ物理学 4 放物運動と惑星運動 地上のように下向きに重力がはたらいているような場においては 物体を投げると放物運動をする 一方 中心星のまわりの重力場中では 惑星は 円 だ円 放物線または双曲線を描きながら運動する ここでは 放物運動と惑星運動を 運動方程式を導出したうえで 数値シミュ

画像ファイルを扱う これまでに学んだ条件分岐, 繰り返し, 配列, ファイル入出力を使って, 画像を扱うプログラムにチャレンジしてみよう

2016年度 筑波大・理系数学

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

Display 表示の初期化が CAVE 表示の初期化に置き換わり CAVE 用のプログラムに書き換えることが出来る 表 2 1 画面 (Windows LINUX IRIX) 用の OpenGL #include<stdio.h> #include<windows.h> #include<gl/g

3D グラフィックス処理の一般過程 1. 3D グラフィックス処理の一般過程

02: 変数と標準入出力

Transcription:

情報科教育法 担当畔上秀幸情報科学研究科複雑系科学専攻

高等学校学習指導要領 第 章 : 普通教育に関する各教科 - 第 0 節 : 情報 hp://www.mex.go.jp/b_menu/shuppan/sono a/99030/03603/0.hm 情報 B (3) 問題のモデル化とコンピュータを活用した解決 ア モデル化とシミュレーション 身のまわりの現象や社会現象などを通して, モデル化とシミュレーションの考え方や方法を理解させ, 実際の問題解決に活用できるようにする 内容の取扱い (3) については, ソフトウェアやプログラミング言語を用い, 実習を中心に扱うようにする

畔上担当分の授業内容 モデル化とシミュレーション に関連して, コンピュータグラフィックスと数値シミュレーションについて学ぶ. OpenGL による CG プログラミング C 言語によるプログラミング Microsof Visual Sudio 005の環境で,Cによるプログラミング OpenGLによるコンピュータグラフィックス OpenGLの利用法 / コンピュータグラフィックスで使われる座標変換 / OpenGLで書かれたプログラムの実行 OpenGLによるアニメーション OpenGL を用いたアニメーションの制作 マルチボディダイナミクス 数値シミュレーションの例として, リンク機構の運動解析の解説 デモプログラムの実行 3

OpenGL による CG プログラミング 情報科教育法 4

C 言語によるプログラミング OpenGL による CG プログラミング 5

C プログラムの実行までの手順 C 言語で書かれたプログラムは次のように実行される. デバッグ例えば es.c ソースプログラムエラーメッセージ Cコンパイラ誤りあり es.obj オブジェクトモジュールライブラリ *.lib リンカオブジェクトモジュール es.exe 実行可能プログラム *.obj 6

C プログラムの構造 関数を含む C プログラムは次の形式で構成される. #include < ヘッダファイル名 > プロトタイプ宣言 in main( ) { 宣言部, 定義プログラム reurn 0; } 関数型関数名 ( 仮引数 ) { 宣言部, 定義プログラム reurn 結果の値 ; }... 7

lesson_.c Hellow World! を画面出力する. #include <sdio.h> in main(void) { prinf("hellow World! n"); } reurn(0); 8

C 言語で使う型 算術型 符号付き整数 char (bye), shor in or shor (bye), in (4bye), long in or long (4bye) 符号なし整数 unsigned char (bye), unsigned shor in (bye), unsigned in (4bye), unsigned long in (4bye) 列挙型 enum 浮動少数型 floa (4bye), double (8bye), long double (80bi 最低保証 ) 9

lesson_.c 整数, 浮動小数の入出力 #include <sdio.h> #include <mah.h> in main(void) { in a; floa b; double c; a ; b.5; /*.5F と書いてもよい */ c 500.4; /* 5.004E と書いてもよい */ prinf("a %d n", a); prinf("b %f n", b); prinf("c %e n", c); } reurn(0); 0

lesson_4.c 自前の sin 関数 マクロ ( 置換 ) #define 識別子置換要素並び 例えば #define PI (3.4)

OpenGL によるコンピュータグラフィックス OpenGL による CG プログラミング

OpenGL とは Open Graphic Library 3 次元形状の描画のために開発されたソフトウェア ライブラリ CAD, CG モデラーで使われている. 特徴 UNIX 系 OS と Windows と Macinosh のいずれでも動く. リアルタイムで ( インタラクティブに ) 表示を行える. 3

描画ハードウェアウィンドウシステムGLUT ライブラリの構成 OpenGL Library (GL): 点, 線, 多角形の描画など OpenGL Uiliy Library (GLU): プリミティブの描画 OpenGL Uiliy Tooli (GLUT): Window の管理 OpenGL OpenGL アプリケーションプログラム GLU GL 4

lesson_.c 空のウィンドウを開く. void gluini(in *argc, char **argv) GLUT を初期化する. 引数には main の引数を渡す. in glucreaewindow(char *name) ウィンドウを開く. 引数 name はそのウィンドウのタイトルバーに表示される. 戻り値は開いたウィンドウの識別子 void gludisplayfunc(void (*func)(void)) ウィンドウが開かれたり, 他のウィンドウによって隠されたウィンドウが再び現れたりして, ウィンドウを再描画する必要があるときに, 引数 func ( 関数のポインタ ) で指定した関数が実行される. void glumainloop(void) この関数を呼び出すことで, プログラムはループ処理に入り, イベントの待ち受け状態になる. 5

lesson_.c 矩形を描く. void gluinidisplaymode(unsigned in mode) ディスプレイの表示モードを設定 mode に色の指定方法を設定する場合 GLUT_RGBA:RGB ( 赤, 緑, 青, 透明度 ) GLUT_INDEX: インデックスカラーモード 各種バッファの ON/OFF の設定がある. void gluiniwindowsie(in w, in h) 新たに開くウィンドウの幅と高さを指定 void gluiniwindowposiion(in x, in y) 新たに開くウィンドウの位置を指定 6

lesson_.c(con.) void glclearcolor(glclampf R, GLclampf G, GLclampf B, GLclampf A) 背景色を設定 R,G,B, Aは赤, 緑, 青, 不透明度 (α 値 ) の強さを示す GLclampf 型 (floa 型と等価 ) 0~ の値 (0, 0, 0): 黒色, (,, ) : 白色 void glclear(glbifield mas) mas には消去するバッファ ( メモリ ) を指定 GL_COLOR_BUFFER_BIT: 描画エリアの消去 GL_DEPTH_BUFFER_BIT: 隠面消去処理用奥行情報の消去 このほかに, ステンシルバッファ, オーバーレイバッファなどの消去がある. glflush(void) 実行されていない OpenGL の命令を全部実行 void glbegin(glnum mode) ~ void glend(void) 図形の関数を置く環境 mode には描画する図形のタイプを指定 7

lesson_.c(con.) glbegin() の引数 mode に指定できる図形のタイプ GL_POINTS 点を打つ. GL_LINES 点を直線で結ぶ. GL_LINE_STRIP 折れ線を描く. GL_LINE_LOOP 折れ線を描き, 始点と終点の間も結ぶ. v3 v0 v v v4 GL_LINES v3 v0 v3 v0 v v v4 GL_LINE_STRIP v v v4 GL_LINE_LOOP 8

lesson_.c(con.) GL_TRIANGLES / GL_QUADS 3 あるいは 4 点を組にして, 三角形あるいは四角形を描く. GL_TRIANGLE_STRIP / GL_QUAD_STRIP 一辺を共有しながら帯状に三角形あるいは四角形を描く. GL_TRIANGLE_FAN 一辺を共有しながら扇状に三角形を描く. GL_POLYGON 凸多角形を描く. v4 v5 v3 v0 v7 v v v6 GL_QUADS v v0 v4 v3 v v5 GL_QUAD_STRIP v3 v4 v v5 v0 v GL_TRIANGLES v4 v v3 v0 v GL_TRIANGLE_STRIP v v v3 v4 v0 GL_TRIANGLE_FAN v3 v4 v v0 v GL_POLYGON 9

lesson_.c(con.) void glverexf(glfloa x, GLfloa y) 頂点の座標値を設定 引数の型は GLfloa (floa と等価 ) 3, 4 次元 (x,y,), (x,y,,w) のときは glverex3f (), glverex4f () 引数が double 型のときは glverex?d(), in 型のときは glverex?i() 引数がポインタのときは void glverex??v() void glcolor3f(glfloa r, GLfloa g, GLfloa b) 描画色を指定 r,g,b には赤, 緑, 青の強さを 0~ の範囲で指定 r,g,b, a のときは void glcolor4f() 引数が double 型のときは glcolor?d(), in 型のときは glcolor?i() 0

lesson_4.c シルピンスキーのギャスケット lengh /.0; /* 再帰関数 */ if(lengh > 0.0){ draw_gase(x0, y0, lengh); draw_gase(mid_poin(x0, x), mid_poin(y0, y), lengh); draw_gase(mid_poin(x, x0), mid_poin(y, y0), lengh); }

CG で使われる変換 投影変換 (projecive ransformaion) 3 次元形状モデルをディスプレイや印刷面の 次元面に投影する変換 モデリングされた形状をディスプレイに表示したり, プリンタで印刷する際に必要となる 幾何変換 (geomeric ransformaion) 3 次元形状モデルの定義された局所座標系を平行移動, 回転移動, 拡大 縮小変形を行う変換 ( 座標変換は幾何変換の逆向き ) 異なる座標系でモデリングされたパーツを全体座標系で組み合わせるあるいは分解する際に必要となる. 視野変換 (viewing ransformaion) 視点の位置あるいは投影する方向 ( 視線の方向 ) を移動 回転する変換 実際には 3 次元形状モデルを幾何変換することになる.

同次座標 n 次元空間上の点 P (x, x,, x n ) を次の関係に基づいて n 次元の直交座標系で座標 (X, X,, X n, W) で表現する方法を同次座標 (homogeneous coordinae) 表現と呼ぶ. X X X n x, x,, xn W W W 同次座標を導入する理由は, 平行移動, 回転移動, 投影変換などが行列で表現できるためである. 3

平行移動 点 P (x,y,) を T(T x,t y,t,) だけ平行移動した点 P (x,y, ) は同次座標表現を用いて次式となる. x 0 0 Tx x y 0 0 T y y 0 0 T 0 0 0 x x Tx y y Ty T P T P y x 4

回転移動 点 P (x,y,) を x 軸, y 軸, 軸の方向に向いて時計方向 ( 右回り ) に θ x,θ y,θ だけ回転した点 P (x,y, ) は同次座標表現を用いて次式となる. x 0 0 0 x y 0 cosθx sinθx 0 y 0 sinθx cosθx 0 0 0 0 x cosθy 0 sinθy 0 x y 0 0 0 y sinθy 0 cosθy 0 0 0 0 x cosθ sinθ 0 0 x y sinθ cosθ 0 0 y P 0 0 0 θ P α 0 0 0 x y x cos( α θ) r y sin ( α θ) cosα cosθ sinαsinθ r cosα sinθ sinαcosθ cosθ sinθ x sinθ cosθ y 5

拡大 縮小 反転変形 x 軸, y 軸, 軸に対して S x, S y, S 倍した場合 x Sx 0 0 0 x y 0 Sy 0 0 y 0 0 S 0 0 0 0 x 軸および原点に対して反転した場合 x 0 0 0 x y 0 0 0 y 0 0 0 0 0 0 x 0 0 0 x y 0 0 0 y 0 0 0 0 0 0 6

幾何変換の応用 任意の軸回りの回転移動 点 P (x,y,) を点 Q (x Q,y Q, Q ) を始点とする単位ベクトル n(n x,n y,n ) に対して時計方向に θ だけ回転した点 P (x,y, ) への変換を考えてみよう. y n Q P θ P x 7

幾何変換の応用 (con.) 任意の軸回りの回転移動 (con.) 手順 : 点 Q (x Q,y Q, Q ) を原点に平行移動する. x 0 0 xq x y 0 0 y Q y 0 0 Q 0 0 0 x Tx n Q y P x 8

幾何変換の応用 (con.) 任意の軸回りの回転移動 (con.) 手順 : 単位ベクトル n(n x,n y,n ) を 軸回りに α だけ回転して y- 平面内に移動する (n ベクトルとする ). ただし, ny nx cos α, sin α n n n n x y x y n y x cosα sinα 0 0 x y sinα cosα 0 0 y 0 0 0 0 0 0 x R x ( α ) 軸回りに α 回転 α Q P x 9

幾何変換の応用 (con.) 任意の軸回りの回転移動 (con.) 手順 3: n ベクトルを x 軸回りに β だけ回転して x 軸と一致させる (n ベクトルとする ). ただし, cos β n y x3 0 0 0 x y 3 0 cosβ sinβ 0 y 3 0 sinβ cosβ 0 0 0 0 x R x ( β ) 3 x n β Q P x 30

幾何変換の応用 (con.) 任意の軸回りの回転移動 (con.) 手順 4: n ベクトルを 軸回りに θ だけ回転する. x4 cosθ sinθ 0 0 x3 y 4 sinθ cosθ 0 0 y 3 4 0 0 0 3 0 0 0 x R x ( θ ) 4 3 n P y θ Q x 3

幾何変換の応用 (con.) 任意の軸回りの回転移動 (con.) 手順 5: 手順 3 の逆変換を行う. 手順 6: 手順 の逆変換を行う. 手順 7: 手順 の逆変換を行う. したがって, x x R x 5 β 4 R x 6 α 5 x T x 7 6 ( α) ( β) ( θ) ( β) ( α) x T R R R R R Tx 7 x x 3

幾何変換の応用 (con.) オイラー角による回転移動 (con.) 局所座標系 x L -y L - L から全体座標系 x-y- への回転移動を考えてみよう. 全体座標系から局所座標系への回転はオイラー角 (α,β,γ) で与えられた場合 ( γ) ( β) ( α) x R R R x y x L L β y L x α γ x L x y 33

投影変換 種類の投影変換 透視投影変換 視点を v 軸上に置き, v 軸に垂直な面に投影する. y v 平行投影変換 v x v 視点を全体座標系の 軸上無限遠方に置き, v 軸に垂直な面に投影する. y v 無限遠方 v x v 34

投影変換に必要な座標系 全体座標系 (world coordinae sysem): (x,y,) 3 次元モデルを定義する座標系 ( 右手系 ) 視座標系 (viewing coordinae sysem): (x v,y v, v ) 視線を v 軸とした座標系 ( 通常, 左手系 ) yv y v 視点を原点に置いた場合 xv x 35

投影変換に必要な座標系 (con.) 正規化視座標系 (normalied viewing coordinae sysem): (x nv,y nv, nv ) 視座標系の可視領域を正規化した座標系 ( 通常, 左手系 ) 隠面 隠線処理で必要となる. y nv y v (,,) v nv x v (,, 0) x nv 36

透視投影変換 透視投影変換では視点と投影面の位置を違えた つの変換が使われる. 視点 v 0, 投影面 v d ( 通常こちらが使われる ) y v v d ( x, y, ) ( x, y, ) d d d v v v v x v 視点 v d, 投影面 v 0 (d のとき平行投影変換となる ) y v x, y, x, y, ( ) 0 0 0 ( ) v v v v d x v v 37

透視投影変換 視点 v 0, 投影面 v d のとき 点 (x v,y v, v ) と投影点 (x d,y d, d ) の関係は次式となる. xd xv yd yv xv yv,, d d xd, yd, d d d d d d v v v v y v v d ( x, y, ) ( x, y, ) d d d v v v v x v 38

透視投影変換 (con.) 視点 v 0, 投影面 v d のとき (con.) これらの関係を同次座標で表せば次式となる. X d 0 0 0 xv Y 0 0 0 d y v Zd 0 0 0 v Wd 0 0 d 0 xv 実際, 次のようになる. Xd xv v d xd Y d y v xv yd Zd v v d d Wd v d d 39

透視投影変換 (con.) 視点 v d, 投影面 v 0 のとき 点 (x v,y v, v ) と投影点 (x 0,y 0, 0 ) の関係は次式となる. x x y y x y,, 0 x, y, d 0 d d d d d d 0 v 0 v v v 0 0 0 v v v v y v ( x, y, ) 0 0 0 ( x, y, ) v v v v d x v v 40

透視投影変換 (con.) 視点 v d, 投影面 v 0 のとき (con.) これらの関係を同次座標で表せば次式となる. X 0 0 0 0 xv Y 0 0 0 0 y v Z0 0 0 0 0 v W0 0 0 d xv 実際, 次のようになる. X0 xv v d x0 Y 0 y v xv y0 Z0 0 v d 0 W0 v d 0 d のとき平行投影変換となる. 4

正規化視座標系への変換 視点 v 0, 投影面 v d のとき 可視領域 (viewing volume) を d v f と仮定する. y v ( dmax, dmax, ) x y d ( x f max, yf max, f ) x v ( x, y, d) dmin dmin v x v -y v に対する正規化視座標系 (x v,y v, v ) ( x f max xdmax, yf max ydmax, f ) yv yv ydmax (,, d ) x v xv xdmax v v 4

正規化視座標系への変換 (con.) 視点 v 0, 投影面 v d のとき (con.) これらの関係を同次座標で表せば次式となる. X v xdmax 0 0 0 xv Y v 0 ydmax 0 0 y v Z v 0 0 0 v W v 0 0 0 実際, 次のようになる. X v xv xdmax x xv xdmax Y v yv y dmax y yv ydmax Z v v v W v 43

正規化視座標系への変換 (con.) 視点 v 0, 投影面 v d のとき (con.) さらに, 正規化視座標系 (x nv,y nv, nv ) を想定して, 可視領域が立方体に対応するような変換を考えよう. ( xf max xdmax, yf max ydmax, f ) yv yv ydmax (,, d ) v x v xv xdmax xnv x v ynv y v β d v d,, nv α d d d f d f d v v v v v α v d nv 0 d f v f nv d β d f y (,, 0) nv (,,) nv x nv 44

正規化視座標系への変換 (con.) 視点 v 0, 投影面 v d のとき (con.) 正規化視座標系 : (x nv,y nv, nv ) への変換 0 0 0 X nv 0 0 0 x v Y nv y v d Z 0 0 nv v d f d f W nv 0 0 d 0 実際, 次のようになる. xnv xnv v d ynv, v f ynv nv 0 nv x v y v xnv x v ( v d) v d ynv y v ( v d) ( d f ) nv ( v d) v d ( d f ) 45

OpenGL の変換 コンピュータで実行される変換の順番 OpenGL では同次座標系の変換行列 (4 4) を使って各種変換を行っている. 点情報 A A 幾何変換 A n P 投影変換 P 陰線処理画像変換画像 v v P PA A Av n 46

OpenGL の変換 (con.) void glmarixmode(glenum mode) mode に引数 GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE を指定して, 幾何変換, 射影変換, テクスチャー行列のどれを操作するか指定する. void glloadideniy(void) 現在対象としている行列を4x4の単位行列にする. 例えば glmarixmode(gl_projection); /* 射影変換の設定 */ glloadideniy(); /* 初期化 */ gluperspecive(60.0,.0,.0, 0.0); P I 0 P glmarixmode(gl_modelview); /* 幾何変換の設定 */ glloadideniy(); /* 初期化 */ gltranslaef(-.0, 0.0, 0.0);/* x 軸方向移動 */ glroaef(-30.0, 0.0, 0.0,.0);/* 回転 */ gluwireteapo(.0);/* ティーポットを描画 */ A I 0 A A v PA Av 47

OpenGL による平行投影変換 void glorho(gldouble lef, Gldouble righ, Gldouble boom, Gldouble op, Gldouble near, Gldouble far) y y v op lef righ v 視点は無限遠方 boom near ( v 軸 ) x x v far ( v 軸 ) 48

OpenGL による透視投影変換 void gluperspecive(gldouble fovy, Gldouble aspec, GLdouble near, Gldouble far) y y v aspecw/h fovy w h v 視点は原点 x x v near ( v 軸 ) far ( v 軸 ) 49

視点の位置 void glulooa(gldouble ex, GLdouble ey, GLdouble e, GLdouble cx, GLdouble cy, GLdouble c, GLdouble ux, GLdouble uy, GLdouble u) ux, uy, u は ウィンドウに表示される画像の上の方向を示す. y y v (cx, cy, c) ( 軸 ) (ex, ey, e) ( 軸 ) v x x v 50

OpenGL の幾何変換 平行移動 void gltranslaef(glfloa x, GLfloa y, GLfloa ) 回転 局所座標系を x, y, 軸に x, y, だけ移動する. void glroaef(glfloa angle, GLfloa x, GLfloa y, GLfloa ) angle は度数で指定する. 例えば,X-Y 平面で 60 度左に回転する場合 glroaef(60.0, 0.0, 0.0,.0); 伸縮 void glscalef(glfloa x, GLfloa y, GLfloa ) 各軸方向へ指定された値で伸縮させる. 例えば,X,Y 方向に半分の大きさにする場合 glscalef(0.5, 0.5,.0) 5

OpenGL の幾何変換 (con.) glpushmarix(), glpopmarix() 変換行列を保存する. スタック Push Pop Push Pop I A A A 3 A A A A A 5 A 4 A A A A A A A A glloadideniy() glscalef() gltranslaef() glscalef() draw_uad() gltranslaef() glscalef() glroaef() draw_ri() 5

lesson4_.c ティーポットを平行投影変換で描く 53

lesson4_.c(con.) これ以降 racball.c, racball.h を利用する. glumousefunc(void (*func)(in buon, in sae, in x, in y)) func にはマウスのボタンが押されたときに実行する関数のポインタを与える. buon には押されたボタン (GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON, GLUT_RIGHT_BUTTON),sae には押した (GLUT_DOWN) のか離した (GLUT_UP) のか,x と y にはその位置が渡される. glumoionfunc(void (*func)(in x, in y)) func には, マウスのいずれかのボタンを押しながらマウスを動かしたときに実行する関数のポインタを与える. x と y には 現在のマウスの位置が渡される. 設定を解除するには引数に 0( ヌルポインタ ) を指定する (sdio.h 等の中で定義されている記号定数 NULL を使用しても良い ). 54

GLUT のプリミティブ関数 丸型オブジェクト 円錐 void gluwirecone(radius, heigh, slices, sacs); void glusolidcone(radius, heigh, slices, sacs); 球体 void gluwiresphere(radius, slices, sacs); void glusolidsphere(radius, slices, sacs); 特殊型オブジェクト トーラス void gluwiretorus(innerradius, ouerradius, nsides, rings); void glusolidtorus(innerradius, ouerradius, nsides, rings); ティーポット void gluwireteapo(sie); void glusolidteapo(sie); 面体オブジェクト 立方体 void gluwirecube(sie); void glusolidcube(sie); 四面体 void gluwireterahedron(void); void glusolidterahedron(void); 八面体 void gluwireocahedron(void); void glusolidocahedron(void); 十二面体 void gluwiredodecahedron(void); void glusoliddodecahedron(void); 二十面体 void gluwireicosahedron(void); void glusolidicosahedron(void); 55

ダブルバッファリング ダブルバッファリング gluinidisplaymode(glut_double) を指定して glflush() の代りに gluswapbuffers() を使用する. in gluswapbuffers(void) ダブルバッファリングのつのバッファを交換することでちらつきを防ぐ. ディスプレイのリフレッシュレートが 60H であれば, バッファの交換は /60 秒ごとに行われる. 56

lesson4_.c ティーポットを透視投影変換で描く 57

lesson4_3.c ティーポットと水滴を下図のように移動する. 58

OpenGL によるアニメーション OpenGL による CG プログラミング 59

lesson7_.c, lesson7_.c ティーポットを回転させる. void gluidlefunc(void (*func)(void)) 入力イベントがない場合, 引数 func ( 関数のポインタ ) で指定した関数を実行する. 60

lesson7_3.c 回転するドーナツとティーポットのウォークスルーアニメーション 6

マルチボディダイナミクス 情報科教育法 6

一般化座標表現 一般化座標 ( r ) x x ( r ) G ( r ) G ( r ) 拘束条件 一般化外力 63 ( ) θ Φ 0 Φ : R R P ( L (( 0,T ))) 3 ( H (( 0,T ))) ( r,,,4) ( ) Ω Q x ( 4), () ( 4) Q { ( (( ))) ( ) ( ) } H 0,T 0 0, 0 0 Ω ( ) ( 4) ( ) Ω x ( ) ( 3) ( 3) Ω P

拘束条件 詳細 ( ) Φ 64 x x ( 4) (,4) ( ) ( 4) (,4 ) ( ) () (, ) () ( ) (,) ( ) G cosθ () (,) () ( ) (,) ( ) G l l x x x x G G sinθ ( ) (,3) ( ) ( 3) G cosθ ( ) (,3) ( ) ( 3) G l l l l sinθ θ θ cosθ x x x x ( 3) G ( 3) ( 4) G x ( 4) G ( 4) G G sinθ x x l l G G x x G G cosθ sinθ l l (,4) (, ) ( 4) ( ), l ( ) ( ) (,3) l ( 3)

制約付変分原理 作用積分の停留化問題 (Hamilon の原理 ) に拘束条件を加えた制約付停留化問題 最適性の条件 拘束条件の時間微分 65 ( ) ( ) ( ) { } ( ) ( ) T T Q U T U T L 0 0, d, d, saionalie P M λ λ λ Φ R ( ) ( ) ( ) 0 0 Φ Φ Φ Φ, d, lim, T 0 T 0 λ P M λ λ P M λ λ λ δ δ ε εδ εδ δ ε T L L T T T T T d d, 0 d d Φ Φ Φ Φ Φ Φ Φ Φ

微分代数方程式 最適性の条件と拘束条件の時間 階微分より微分代数方程式 (DAE: differenial-algebraic euaions) を得る. () () () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) M M B M M M M A B AP γ M γ P λ M T T T T T T T T T 4 4 4 T,,,,,,, diag 0 Φ Φ Φ Φ Φ Φ Φ Φ Φ Φ Φ Φ Φ I m m I m m 66

微分代数方程式 (con.) 詳細 67 ( ) ( ) ( ) () ( ) () () ( ) () ( ) ( ) ( ) () ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) 0 0 0 0 0 sin cos sin sin cos cos sin cos,3,3,,,,,4,4 θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ θ l l l l l l l l γ

時間積分法 次の Runge-Kua 法 () ( ) ( ) ( ) ( ) ( ) ( ) ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) () ( ) ( ) ( ) ( ) ( ) ( ) ( ) Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ Δ b a b b a O b b a O b a O b a b a O N T T n 3 3 where / / / and, 0,,,, 0, : f f f f f f f f f f f R 68

時間積分法 (con.) 4 次の Runge-Kua 法 () ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ) Δ Δ Δ Δ Δ N T n 3 4 3 4 3 where 6, 0,,,, 0, : f f f f f R 69

有限要素モデル Ω の有限要素モデル Femap Ver9..0 を使用 総節点数 : 5,49 総要素数 :,046 70

表面要素の描画 要素と節点のデータ構造 要素 ラベル : n 構成されている節点 : i, j, 節点 i n ラベル : i 座標値 : i x, i y, i j for( n0 ; n<n ; n ){ glbegin( GL_TRIANGLES ); glverex3d( n. i. i_x, n. i. i_y, n. i. i_); glverex3d( n. j. j_x, n. j. j_y, n. j. j_); glend(); glverex3d( n.. _x, n.. _y, n.. _); } 7

アニメーション結果 ピストンクランク機構 7

参考文献. C 言語によるプログラミング基礎編 ( 第 版 ) / 応用編 ( 第 版 ), 内田智史 ( 監修 ) / スーパーリファレンス編, 内田智史ほか, オーム社. OpenGL による 3 次元 CG プログラミング, 林武文, 加藤清敬, コロナ社, 003. 3. 3 次元 CG の基礎と応用, 千葉則茂, 土井章男著, サイエンス社, 004. 4. CAD/CAM/CG のための形状処理工学入門, 嘉数侑昇, 古川正志著, 森北出版,995. 5. コンピュータグラフィックス理論と実践, James D. Foley, Seven K. Feiner, Andries van Dam, John F. Hughes: 佐藤義雄 ( 訳 ), オーム社, 00. 6. hp://www.waayamau.ac.jp/~ooi/opengl/libglu.hml 7. hp://opengl.jp/glu/index.hml 73