スクリプトガイド > 3Dシーン > JSL 3Dシーンボックス
公開日: 09/19/2023

JSL 3Dシーンボックス

次の関数は、3Dシーンのセットアップと設定に必要です。

JMPのすべての表示(詳細については、表示ツリーを参照)と同様に、3Dシーンもディスプレイボックス(この場合は、シーンボックス)に配置する必要があります。その後で、そのシーンボックスをウィンドウに配置します。したがって、簡単な3Dシーンのスクリプトは、次のようになります。

myScene = Scene Box(300, 300); // 300 x 300ピクセルのシーンボックスを作成する
...(シーンをセットアップするコマンド)...
New Window("3Dシーン", myScene); // シーンをウィンドウに描画する
...(シーンを操作するコマンド)

シーンの要素を作成するメッセージをシーンに送ることができます。代表的なメッセージとして、視点の変更、物理要素の作成、光源およびテクスチャの操作などがあります。これらのメッセージは表示リスト(ディスプレイリスト)内に保持されます。表示リストは、次のどちらかの方法で操作されます。

メッセージとしてシーンに送られ、ただちにシーンの内部的な表示リストに追加される。

メッセージとして、グローバル変数に格納された表示リストに送られ、後でシーンの表示リストにより呼び出される。

図13.2 シーンの作成 

シーンの作成

次のスクリプトは、シーンの表示リストにメッセージを送る例です。各コマンドについては、この章の後半で詳しく説明します。

scene = Scene Box( 400, 400 ); // Scene Boxを作成する
New Window( "例1", scene ); // シーンをウィンドウに配置する
scene << Perspective( 45, 3, 7 ); // カメラを定義する
scene << Translate( 0.0, 0.0, -4.5 ); // (0,0,-4.5)に移動して描画する
scene << Color( 1, 0, 0 ); // テキストのRGB色を設定する
scene << Text( center, baseline, 0.2, "Hello, World." ); // テキストを追加する
scene << Update; // シーンを更新する

最初の2行で、シーンを作成し、ウィンドウに配置します。Perspectiveメッセージは、表示角度と被写界深度を定義します。このコマンドをメッセージとしてシーンに送ると、ただちにシーンの表示リストに追加されます。「Hello World」テキストは原点(0, 0, 0)に描画されるので、Translateメッセージを表示リストに追加し、原点が視野に入るようにカメラを少し後方に移動します。Colorメッセージで色を赤に設定し、テキストを描画し、Updateメッセージでシーンをレンダリングします。これで、コマンドを含む表示リストが描画されます。

図13.3 Hello World 

Hello World

同様に、表示を作成するコマンドを、グローバル変数に格納されている表示リストに累積させた後で、一度にシーンに送ることができます。グローバル変数を表示リストとして定義するには、Scene Display List関数を使って表示リストを割り当てます。たとえば、グローバル変数のgreetingを表示リストとして使うには、次の関数を実行します。

greeting=Scene Display List();

この後で、表示コマンドをメッセージとしてgreetingに送ることができます。次の例では、表示リストを使って「Hello World」を描画します。

greeting = Scene Display List();
greeting << Color( 1, 0, 0 ); // テキストのRGB色を設定する
greeting << Text( center, baseline, 0.2, "Hello, World." ); // テキストを追加する
 

// ウィンドウを描画して、保存済みの表示リストを送る

scene = Scene Box( 400, 400 ); // Scene Boxを作成する
New Window( "例1", scene ); // シーンをウィンドウに配置する
scene << Perspective( 45, 3, 7 ); // カメラを定義する
scene << Translate( 0.0, 0.0, -4.5 ); // (0,0,-4.5)に移動して描画する
scene << Call List( greeting ); // 表示リストをシーンに送る
scene << Update; // シーンを更新する

どのコマンドが別個に表示リストに移されたか、どのコマンドがシーンに直接適用されたかに注意してください。カメラを操作するコマンド(PerspectiveおよびTranslate)は、シーンに直接適用されています。オブジェクトを定義するコマンド(ColorおよびText)は、表示リストに移されました。こうしておけば、その表示リストを何回でも呼び出して、同じオブジェクトを異なる位置に複製できます。

より詳細な情報が必要な場合や、質問があるときは、JMPユーザーコミュニティで答えを見つけましょう (community.jmp.com).