第三回講義スライド

第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