4 実装仕様
4.6 モデルの描画
4.6.12 ウェッジ
104 // 描画の開始
glBegin(GL_POLYGON);
// 描画の実行
glVertex3d(m_dLengthX, 0, 0);
glVertex3d(m_dLengthX, 0, m_dLengthZ);
glVertex3d(m_dLengthX, m_dLengthY, m_dLengthZ);
glVertex3d(m_dLengthX, m_dLengthY, 0);
// 描画の終了 glEnd();
// 左面 // 描画の開始
glBegin(GL_POLYGON);
// 描画の実行
glVertex3d(0, 0, m_dLengthZ);
glVertex3d(0, 0, 0);
glVertex3d(0, m_dLengthY, 0);
glVertex3d(0, m_dLengthY, m_dLengthZ);
// 描画の終了 glEnd();
また,面要素を持つモデルは,表示方法をワイヤフレームモデルとサーフェスモデルに 切り替えることができる.モデルの表示方法の切り替えにはglPolygonMode関数を使用する.
glPolygonMode関数の定義を次に示す.
void glPolygonMode( GLenum face, GLenum mode )
glPolygonMode関数は2個の引数をとり,戻り値はない.glPolygonMode関数の引数を次
に示す.
引数名 引数名引数名
引数名 型型 型型 引数引数引数引数のののの意味意味意味 意味
face GLenum 多角形の描画面
mode GLenum 描画モード
本システムでは,faceにはGL_FRONT_AND_BACKを設定する.また,modeには,ワイ ヤフレームモデルを描画する場合,GL_LINEを設定し,サーフェスモデルを描画する場合,
GL_FILLを設定する.
105 幾何情報
ウェッジの幾何情報を次に示す.
配置点のx座標 配置点のy座標 配置点のz座標
配置点のx座標 配置点のy座標 配置点のz座標 x
y z x y z
x y
z x y
z
●
x軸方向への大きさ y軸方向への大きさ
z軸方向への大きさ
x軸方向の短い辺の大きさ> 0
●
x軸方向への大きさ y軸方向への大きさ
z軸方向への大きさ
x軸方向の短い辺の大きさ= 0
位相情報
本システムでは,ウェッジの位相情報として,頂点,稜線と面に関する情報を保持する.
ウェッジの位相情報を次に示す.
パラメータ パラメータ パラメータ
パラメータ 型型型型 説明説明説明説明
m_hFace Hashtable 面に関する情報
本システムでは,8 個の頂点,12 個の稜線と6 個の面を基にウェッジの位相情報を設定 する.ウェッジの位相情報を次に示す.
106
●a b
●
●
①①
①①
●e f
b c
f g
●
●
●
●
②
②
②
②
●
●
a d
●h
④④
④④
●e
●
●
a b
d c
●
●
⑤
⑤⑤
⑤
f h g
●
● ●
⑥⑥
⑥⑥
●e
●d c h g
●
● ●
③
③
③
③
①①
①① A C
D B
②
②②
② B E G
④ F
④
④④ D I
K L
⑤⑤⑤ H ⑤
E
A K
⑥⑥
⑥⑥ C
G J
L
③③③
③ F H I
J
ウェッジの面,稜線と頂点の対応を次に示す.
面番号面番号面番号
面番号 稜線稜線稜線稜線 頂点頂点 頂点頂点
1 A,B,C,D a,b,f,e
2 E,F,G,B b,c,g,f
3 H,I,J,F c,d,h,g
4 K,D,L,I d,a,e,h
5 A,E,H,K a,b,c,d
6 C,G,J,L e,f,g,h
描画方法
本システムでは,モデル空間上においてマウス操作でウェッジを描画する.ウェッジの 描画手順を次に示す.
107
X軸 Y軸
Z軸
①配置点を指定
②長方形の対角を指定
X軸 Y軸
Z軸
③高さを指定
X軸 Y軸
Z軸
④ウェッジを描画
本システムでは,まず,配置点(X ,Y ,Z)をマウス操作で指定する.次に,長方形の対 角線上の点をマウス操作で指定する.そして,ウェッジの高さを表す点(X ,Y ,Z)をマウ ス操作で指定する.最後に,配置点,対角線上の点と高さを表す点からウェッジを描画す る.ただし,配置点と対角線上の点は同一平面上に投影し,高さを表す点は,配置点を通 り,配置点と対角線上の点からなる平面に垂直な平面に投影する.また,ウェッジの描画 の際,ラバーバンド表示を行う.ウェッジのラバーバンド表示では,まず,配置点を指定 後,長方形の対角を指定するまで,マウスの移動を検知し,マウスの3次元座標を算出し,
長方形を描画する.次に,ウェッジの高さを指定するまで,同様にマウスの移動を検知し,
マウスの3次元座標を算出し,ウェッジを描画する.
ウェッジの描画方法として,OpenGL には,ウェッジを描画する関数が用意されていな い.そのため,本システムでは,直方体の描画と同様に 6 個の面を描画することによりウ ェッジを描画する.また,ウェッジにおいても,ワイヤフレームモデルとサーフェスモデ ルに切り替えを可能にする.
108