Ninja Library - カメラ関数

njCameraExLookAt

カメラの位置と姿勢を設定

書式

void njCameraExLookAt( pos, target, up )
const NJS_POINT3 *pos
const NJS_POINT3 *target
const NJS_VECTOR *up

引数

pos   カメラを配置したい位置(眼点)
target   カメラを向けたい点(参照点)
up   上方向ベクトル

戻り値

なし

解説

カメラの位置と姿勢を設定し、カレントマトリックスを操作します。

OpenGL の gluLookAt に似てはいますが、作成した行列をカレントマトリックスに 乗算する方向に注意が必要です。

暗黙の引数としてカレントマトリックスを取ります。

カメラの位置を pos に、視線方向を target を見る方向に設定します。

また、カメラの上方向を上方向ベクトル up の方向に設定します。

上方向ベクトルはカメラの視線方向(pos から target へ向かう方向)に平行にしてはいけません が、直行している必要はありません。

厳密に直行していない場合は、平行成分が取り除かれた残りのベクトルの方向がカメラの上方向 (カメラ座標系のY軸の正方向)に設定されます。

本関数は世界座標からカメラ座標に変換するマトリックスを作成し、それをカレントマトリックスの 左から乗算します。

乗算方向が上記のようになっているため、pos, target, up は全て本関数を呼ぶ直前のカメラの 座標系の表現で設定することができます。

このことは非常に便利で、例えば、オブジェクトツリー内のあるノードに固定されたカメラの方向を、 それに対応したカレントマトリックスの作成後に微調整することなどが簡単に行えます。

また、カメラ関数群はほとんどの関数において、それぞれの関数で新しく作成した行列を、 カレントマトリックスの左から乗算する規則に従っています。

これらのことを深く理解すると、カメラ関数群の応用が非常に広く行えるようになります。

なお、カメラ座標系は njUnitMatrix(NULL); を行った直後は世界座標系に一致していますから、 pos, target, up は、世界座標表現で与えることもできます。


用例

{
    njUnitMatrix( NULL );
    njCameraExLookAt( &CamerePos, &CameraTarget, &CameraUp );
    
    njPushMatrix( NULL );
    njTranslate( NULL, 100.0f, 0.0f, 0.0f );
    njRotateY( NULL, 0x100 );
    njCnkEasyDrawModel( MODEL );
    njPopMatrix( 1 );
}

備考


njCameraExLookAt
COPYRIGHT © SEGA ENTERPRISES, LTD., 1998-2000