Japanese | English | Korean

Samples

LookAt ( イミディエイトモード )

ここではイミディエイトモードにおける、カメラ位置・注視点を利用した視点変換行列の取得方法について解説します。



OpenGL にはユーティリティライブラリとして gluLookAt() が定義されており、この関数を使用してカメラ位置・注視点から視点変換行列を取得することが可能です。 MascotCapsule V4でこの関数と同様の機能を実現する場合、 同じような計算を行うメソッドを自作する必要があります。ここでは一例として、 gluLookAt() と同様の機能を提供するメソッド mcSample_lookat () を紹介します。

このメソッドは、引数として与えられたカメラ位置座標・注視点座標・視界の上方向ベクトルの法線ベクトルから、視点変換行列を計算します。

以下は、サンプルコードでこのメソッドを使用している部分です。
本サンプルのカメラ初期位置は、あくまで目安です。実際には、モデルの大きさ等によって設定すべき値は異なります。

/* カメラの変換行列の作成 */
pmc -> pCameraTrans = IMICRO3Dv4es_m3dTransform_create ( pMe -> pIM3D );
if ( pmc -> pCameraTrans == NULL ){
return HI_FALSE;
}

/* カメラの変換行列パラメータを初期化 */
pmc -> cameraEye [ X ]        = 0.f;
pmc -> cameraEye [ Y ]        = 6.f;
pmc -> cameraEye [ Z ]        = 10.f;
pmc -> cameraCenter [ X ]   = 0.f;
pmc -> cameraCenter [ Y ]   = 0.f;
pmc -> cameraCenter [ Z ]   = 0.f;
pmc -> cameraUp [ X ]         = 0.f;
pmc -> cameraUp [ Y ]         = 1.f;
pmc -> cameraUp [ Z ]         = 0.f;

( 中略 )

/* カメラの変換行列を求める */
mcSample_lookat ( pMe -> pIM3D, pmc -> pCameraTrans, pmc -> cameraEye, pmc -> cameraCenter, pmc -> cameraUp );

IMICRO3Dv4es_m3dGraphics3D_setCamera ( pMe -> pIM3D, pmc -> pG3D, pmc -> pCamera, pmc -> pCameraTrans );

このメソッドによって取得される変換行列は、カメラ座標系をワールド座標系へ変換する行列です。
以下のMのように計算されます。





描画結果