射影変換をする場合
glMatrixMode GL_PROJECTION
モデリング変換をする場合
glMatrixMode GL_MODELVIEW
glOrtho left, right, bottom,
top, near, far
2次元の場合:glOrtho2D
left, right,bottom, top
例)glOrtho -2,2,-2,2,-1,1
透視投影
glFrustum left, right, bottom,
top, near, far
left,right,bottom,topはクリッピング面の座標
near,farは遠近クリッピング面の視点からの距離
gluPerspective fovy, aspect,zNear,zFar
fovy:視界角度0〜180°
aspect: w/h
zNear, zFarはクリッピング面の負のz軸に沿った距離
ビューポートの設定
定義されたウィンドウに対するビューポートの大きさを定義する.
glViewport x, y, width,
height
例)glViewport 0,0,Picture1.Scalewidth,
Picture1.ScaleHeight
但し,Picture1.Scalemode = vbPixels
これを以下のようにすれば縦に縮小された画面が表示される.
注意)移動・回転・縮小の順序により,描画される図形は異なるので要注意
視界変換
視点位置の設定と回転は,すべての物体の移動・回転と考えればよい.
(注意)
VB上で,
THETA=30
glRotatef THETA, 0,1,0
等とすると,「変数の型が一致しません」等のエラーが生じる場合があります.
このようなエラーが生じる場合,変数を()でくくるとエラーが回避できます.
()でくくることにより,変数はアドレスではなく値として引き渡されます.
glRotatef (THETA), 0, 1, 0
問題
1)perse2.frmのサブプロシージャDrawの中のglLoadIdentityを削除した場合,Command1ボタンを押すことによる効果の違いを確認するとともに,それがどうして行なわれるのかを考えなさい. 2)Z軸の負の方向に対して,立方体の中心の間隔0.6として10個の立方体を描くよう,perse2.frmを改変しなさい. (For ..Nextを用いる) 3) 2)に加え,yの正の方向に対してそれぞれの間隔0.2となるようプログラムを改変しなさい. 4) 2)をもとに,glRotatefを用いて,立方体が円周上に配置されるようプログラムを改変しなさい. |