Rotateコマンドは、シーンの視る角度を修正する場合に使います。次の形式で指定します。
Rotate (degrees, xAxis, yAxis, zAxis)
これは、モデルを、ベクトル(xAxis, yAxis, zAxis)で指定した軸を中心にしてdegreesで指定した角度だけ回転します。たとえば、モデルをx軸を中心にして90度回転するには、Rotate( 90, 1, 0, 0 )を使います。
3本の軸の値を行列で指定することもできます (たとえば、Rotate( 90, [1, 0, 0] ))。
TranslateとRotateは、オブジェクトを相対的に位置付ける場合にも使われます。一番初めのTranslateやRotateは、後から指定するすべてのオブジェクトのカメラに対する位置を決めるものと考えることができます。後続のTranslateコマンドとRotateコマンドを使って、球、円柱、円盤などのオブジェクトの位置を決め、Call ListコマンドやArcBallコマンドでリストを表示します。たとえば、「table」というリストと「chair」という表示リストがあるとします。シーンは、次のように指定できます。
図13.7 TranslateとRotateの使用
scene = Scene Box( 600, 600 ); // OpenGLシーンを保持するScene Boxを作成する
New Window( "例1", scene ); // シーンをウィンドウに配置する
For( i = 1, i < 360, i++,
scene << Clear;
scene << Perspective( 45, 1, 10 );
// レンズは45度、近い距離(near)はカメラから1単位、遠い距離(far)は10単位
scene << Translate( 0.0, 0.0, -2 );
scene << Rotate( i, 1, 0, 0 );
scene << Rotate( i * 3, 0, 1, 0 );
scene << Rotate( i * 3 / 2, 0, 0, 1 );
scene << Color( 0, 1, 0 ); // 円柱の色は緑
scene << Cylinder( 0.5, 0.5, 0.5, 40, 10 );
scene << Color( 0, 0, 0 ); // 球の色は黒
scene << Sphere( 0.01, 10, 5 );
scene << Update;
Wait( 0.01 ); );
図13.8 シリンダの回転
シーンへのメッセージの最後でUpdateコマンドを使うことに注意してください。このコマンドは、表示される画面と表示リストの現在の状態を一致させるようにJMPに指示します。前の角度と現在の角度がリスト内に混在しないように、先頭でリストをクリアしてから、変更の後でシーンを更新するよう指定します。