座標系の原点位置制御

これまで扱ってきた座標系の移動や歩行は、 現在の座標系の位置を基準に、追加的に移動する方法でした。 しかし場合によっては、 座標系の原点位置を直接的に制御したい場合もあります。 ここでは、そのような座標系の位置制御について扱います。

- 目次 -

座標系の原点位置制御

原点位置の指定

座標系の原点位置を直接的に指定するには、 setCoordinateLocation 関数を使用します。

- 関数の形式 -

int setCoordinateLocation (
  int coordinateID,
  float x, float y, float z
)

引数は以下の通りです:

原点位置の取得

座標系の原点位置を取得するには、 getCoordinateLocation 関数を使用します。

- 関数の形式 -

int[ ] getCoordinateLocation ( int coordinateID )

引数 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

このプログラムを実行すると、黒い画面に座標軸モデルが表示されます。座標軸モデルは大きいものがワールド座標系の上に、小さいものがローカル座標系の上に配置されています。 ローカル座標系は、リサージュ曲線を描きながら複雑に運動します。

実行結果、移動された座標系の図
実行結果
大きな座標軸と小さな座標軸が表示される。小さな座標系はアニメーションで運動する。