Rotateコマンドは、シーンの視る角度を修正する場合に使います。次の形式で指定します。
Rotate (degrees, xAxis, yAxis, zAxis)
これは、モデルを、ベクトル(xAxis, yAxis, zAxis)で指定した軸を中心にしてdegreesで指定した角度だけ回転します。たとえば、モデルをx軸を中心にして90度回転するには、Rotate( 90, 1, 0, 0 )を使います。
3本の軸の値を行列で指定することもできます(たとえば、Rotate( 90, [1, 0, 0] ))。
注: JMP の三角関数における角度はラジアン単位ですが、Rotateコマンドでは度単位です。
TranslateとRotateは、オブジェクトを相対的に位置付ける場合にも使われます。一番初めのTranslateやRotateは、後から指定するすべてのオブジェクトのカメラに対する位置を決めるものと考えることができます。後続のTranslateコマンドとRotateコマンドを使って、球、円柱、円盤などのオブジェクトの位置を決め、Call ListコマンドやArcBallコマンドでリストを表示します。たとえば、「table」というリストと「chair」という表示リストがあるとします。シーンは、次のように指定できます。
図13.7 TranslateとRotateの使用
次の例では、RotateコマンドをForループ内で使って、シーンのカメラアングルを次々に変更します。このスクリプトは、中心点の周りを回転する円柱を描きます。中心点は小さい球で示されます。
scene = Scene Box( 600, 600 ); // OpenGLシーンを保持するScene Boxを作成する
New Window( "例1", scene ); // シーンをウィンドウに配置する
For( i = 1, i < 360, i++,
scene << Clear;
// レンズは50度、近い距離(near)はカメラから1単位、遠い距離(far)は10単位
scene << Perspective( 50, 1, 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に指示します。前の角度と現在の角度がリスト内に混在しないように、先頭でリストをクリアしてから、変更の後でシーンを更新するよう指定します。