第3回目 グラフィックスプリミティブ 22 ビューイングパイプライン 3D 2D 物体 視点 クリッピング 標準座標系 物体表示 投影行列 2次元変換 行列 レンダリング ウィンドウ モデリング glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0); 平行投影 クリッピング 23 投影とクリッピング 投影: 3次元物体を2次元画像として表現 どのような光線を用いて3D -> 2D 変換を行うか? 平行投影 透視投影 3D空間上のどの範囲の物体を 投影するか? 投影の種類 ビューボリュームの位置・大きさ ビューボリューム glOrtho(-1.0,1.0,-1.0,1.0,-1.0,1.0); 24 1 OpenGL関数名 接頭語 gl glu glut 例: コマンド名 gl Vertex 3f (x, y, z, …); 接尾語 2, 3, 4: 引数の数 引数の型 f: 実数型 d: 倍精度実数型 幾何学データをまとめて s: 単精度整数型 i: 整数型 指定できるので、 v: ベクトル型 比較的よく使う型 25 フレームバッファと色指定1 視点 物体 次元変換 クリッピング等の 一連の処理 書き込み 2 フレームバッファ 読み出し フレームバッファの保持できる データ量が表示画像の質を 決定する。 26 フレームバッファと色指定2 画面の大きさ 例:1024 x 1024 画素(表示単位)を表現するビット数 R, G, B それぞれ8ビット 一枚の画像を表現するデータ数(フレームバッファ量) 1024 x 1024 x 8 x 3 -> 3M bytes 表示できる色の種類 2563 ≈ 1,600,000 natural color グラフィックスモニターは加法混色である。 27 2 三原色 人間が知覚する色の大部分は三つの色を混ぜ合わせること により作り出される。 R, G, B 三原色という。 C = r R + gG + bB 三刺激値 Cは人間に知覚される色であるから、r, g, bは 人間の色知覚を測定して定める必要がある。 等色実験 r, g, b 等色関数 28 による三原色 CIE R -- 700 nm G -- 546.1 nm B -- 435.8 nm これらR, G, Bを用いたとき の三刺激値の知覚される色 の波長λについての関数 等色関数 CIE r (λ ) < 0 モデルで合成できない色 R,G,B 29 表色系 CIE XYZ モデルでは表現できない色の問題を解決する。 R,G,B x, y, z r, g, b x 0.49000 0.31000 0.20000 r y = 0.17697 0.81240 0.01063 g z 0.00000 0.01000 0.99000 b C = xX + yY + zZ での白 RGB 30 3 形状モデリング • z 座標系 右手系3D座標系 x 3種類のモデル ワイヤフレームモデル サーフェイスモデル ソリッドモデル y 31 ソリッドモデル 3Dモデル 8 5 4 1 6 7 各面と頂点との関係を与える 約束:物体の外側から見て反時計 方向に頂点が並ぶように定義する。 ( x1 , y1 , z1 ) 3 2 ( x2 , y2 , z2 ) glBegin(GL_POLYGON); glVertex3f 1 glVertex3f 2 glVertex3f 3 glVertex3f 4 glEnd(); 頂点 頂点 頂点 頂点 ( x3 , y3 , z3 ) ( x4 , y4 , z4 ) ( x5 , y5 , z5 ) M 1-2-3-4, 3-7-8-4, …. 面 頂点 頂点 頂点 頂点 32 実習1 プログラム c1-1.cを改変することにより、課題1.5 を解きなさい。 ヒント: 図形); glBegin( for(….) glEnd(); とできる。 33 4 課題1.5 中心 (0, 0) 半径 0.5 の円を描きなさい。 コンピュータ・グラフィックスでは曲線は線分で近似するので 次式を使って円を近似する。 x = r cos(2πi / n ); y = r sin( 2πi / n ); z = 0; π = 3.1415926536 glBegin(GL_LINE_LOOP); glVertex3f(,,); glEnd(); どの関数の中にこれを書き込む のが適切か? 34 課題1.5(続き) 物体表示のためのビューボリュームの指定 void myInit ( char *progname ) { (一部省略) glClearColor ( 0.0, 0.0, 0.0, 1.0 ); glutKeyboardFunc( myKbd ); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0); ビューボリューム の設定 } 35 二つの座標系 モデリング 右手系の3D座標系 y レンダリング 2D座標系 y 軸の向き に注意 z x z ワールド座標系 x スクリーン座標系 36 5 二種類の投影法 平行投影 透視投影 軸に)平行な光線 を用いて2D像を得る。 適切なビューボリュームを 設定する。 (z y y 投影の中心から発する 光線を用いて2D像を得る。 x x z z 投影の中心 glOrtho(); gluPerspective(); 37 実習2 授業HPからc2-1.cをダウンロードし、平行投影と 透視投影がどのように違うか、また物体の位置を 動かすにはどのようにすればよいか考えなさい。 ヒント:目の位置はどこにあるか 考えてみる。 物体から遠ざかった例: 38 6
© Copyright 2024