Japanese | English | Korean

Samples

Look At ( イミディエイトモード )

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



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

このメソッドは gluLookAt() と同様、カメラ位置座標・注視点座標・視点ベクトルの法線ベクトルを引数として取り、視点変換行列を返します。 以下にこのメソッドの使用例を挙げます。

/**
 * private float [] camPos ;
 * private float [] camLook ;
 * private float [] camUp ;
 * private Transform camLookTrans ;
 * private Transform camTrans ;
 * camPos はカメラ位置、
 * camLook は注視点、
 * camUp は視線ベクトルの法線ベクトル
 */

/* 視点行列の生成 */
camPos [ 0 ] = 0.f ;
camPos [ 1 ] = 3.f ;
camPos [ 2 ] = 10.f ;

camLook [ 0 ] = 0.f ;
camLook [ 1 ] = -2.f ;
camLook [ 2 ] = -10.f ;

camUp [ 0 ] = 0.f ;
camUp [ 1 ] = 1.f ;
camUp [ 2 ] = 0.f ;

camLookTrans = setLookAtImmediate ( camPos, camLook, camUp );
camTrans.set ( camLookTrans );

/* Graphics3D オブジェクトにカメラを登録 */
g3d.setCamera ( camera, camTrans );

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

この行列を設定することで、カメラが適切に Graphics3D オブジェクト内に設定されます。


描画結果