さて、前回GLUTによる3Dグラフィックスを楽しむスケルトンのお話までしましたが、表示された座標に「2D疑惑」が生じました。実はあれ、
(1)Z軸+(プラス)からー(マイナス)に向かって、
(2)X軸Y軸共に-1から1までの直方体空間の、
(3)平行投射画像(注)
注:これがGLUTのデフォルト状態であると考えられます。
なんです。そして、GLUTの2Dグラフィックスは、
(1)3D空間のX軸、Y軸だけを使って、
(2)Z座標が0の平面に表示されたグラフィックスを
(3)平行投射しているだけ
なんだそうです。(そういわれて前回の画像を見ると確かにZ軸のあるあたりに)赤い線(こちら側に向いた上下に屋が広がった矢印)が見えます。
ではこいつをどうやって「3Dグラフィックスらしく」表示するかというと、
(1)座標を回転するか、
(2)視点を回転するか
のいずれかであることが分かります。(かのアインシュタインの相対性理論と同じように、視点とプリミティブの関係が相対的であることが分かりますね。)
このプリミティブの「回転」はローカル座標(モデル座標)のモデルビュー変換で"glRotate?"関数(注)で行え、視点の位置設定はgluLookAt関数で行えます。但し視点を設定するだけではプリミティブの表示に十分ではなく、「視野空間」を設定してがプリミティブその中に入っていないと見えません。
注:?の所は単精度実数の場合'f'、倍精度実数の場合'd'となります。他のOpenGLやGLUT関数もこのルールで表記しています。
この「視野空間」はプロジェクション変換(投影変換)で(遠近法が効かない)平行投影の場合glOrtho関数、遠近法が有効な透視投影の場合、gluPerspective関数、またはglFrustum関数を使います。
と、まぁ、こんなことを言ってもよくわかりませんよね?であれば、実際にどのように見えるか実験した方が早いです。
次回は今回のスケルトンプログラムを改造して、x、y、zの座標軸が視点や視野空間の設定でどのように見え方が変わるかを実験
してみます。お楽しみに。