これまで扱ってきた座標系の移動や歩行は、 現在の座標系の位置を基準に、追加的に移動する方法でした。 しかし場合によっては、 座標系の原点位置を直接的に制御したい場合もあります。 ここでは、そのような座標系の位置制御について扱います。
座標系の原点位置を直接的に指定するには、 setCoordinateLocation 関数を使用します。
- 関数の形式 -
引数は以下の通りです:
座標系の原点位置を取得するには、 getCoordinateLocation 関数を使用します。
- 関数の形式 -
引数 coordinateID には、取得対象の座標系のIDを指定します。
戻り値には、 [0]、[1]、[2]にそれぞれ原点位置のX、Y、Z成分が返されます。
実際にローカル座標系をワールド座標系の上に配置し、 原点位置の指定によってアニメーション的に移動させてみましょう。 区別しやすくするために、ローカル座標系には小さめの座標軸モデルを、 ワールド座標系には大きめの座標軸モデルを配置します。
import graphics3d.Graphics3DFramework;
import Graphics3D;
import Math; // sin関数を使用するため
// 座標系のIDを控えておく変数
int coord;
// 時刻カウンタ(画面更新周期単位)
int t = 0;
// プログラムの最初に呼び出される関数
void onStart ( int rendererID ) {
// 画面サイズや背景色の設定(省略可能)
setWindowSize( 800, 600 );
setBackgroundColor( 0, 0, 0, 255 );
// ローカル座標系を生成
coord = newCoordinate( );
// ローカル座標系をワールド座標系に配置
mountCoordinate( coord, rendererID );
// ローカル座標系上に座標軸モデルを配置
int axis1 = newAxisModel( 1.5, 1.5, 1.5 );
mountModel( axis1, rendererID, coord );
// ワールド座標系上に座標軸モデルを配置
int axis2 = newAxisModel( 3.0, 3.0, 3.0 );
mountModel( axis2, rendererID );
}
// 画面更新周期ごとに、毎秒数十回呼び出される関数
void onUpdate ( int rendererID ) {
// 原点位置指定でリサージュ曲線移動し、時刻カウンタを加算
setCoordinateLocation( coord, sin(0.1*t), sin(0.5*t), 0.0 );
t++;
}
Sample.vcssl
このプログラムを実行すると、黒い画面に座標軸モデルが表示されます。座標軸モデルは大きいものがワールド座標系の上に、小さいものがローカル座標系の上に配置されています。 ローカル座標系は、リサージュ曲線を描きながら複雑に運動します。