全般的な背景情報 4
画面出力およびユーザー入力GUIの例
図8は、このプログラムによって生成されるユーザー入力GUIおよび画面出力の例を示しています。

ユーザー入力GUI
図8の右側のユーザー入力GUIでは、プログラムで実行される次の4種類の変換の動作を制御するパラメータを入力できます。
- 平行移動
- 回転
- 平行移動
- 拡大縮小
Replotボタン
入力GUIの下部にある[Replot]ボタンをクリックすると、ユーザー入力パラメータと、図7のTransformGroup階層を使用して、図8の左側に示すように、新しい3Dユニバースが作成され、表示されます。
8個のLeafオブジェクト
階層には8個のLeafオブジェクトがあり、これらはすべてColorCubeクラスのオブジェクトです。この8個のオブジェクトは、図7の階層内で斜体で示されています。これらは、図8のユニバース内でも明確に表示されています。
図8のユニバースには、細長いColorCubeオブジェクトで構成される、2組の3D軸(1組に付き3オブジェクト)が表示されます。1組の3D軸は、図8のユニバースイメージの右上の部分にあります。もう1組は、前面が青色、左面が赤色、上面が紫色の大きなColorCubeオブジェクトの内側から突き出ています。
残りのColorCubeオブジェクトは、赤色の面を見せて、3D空間の原点を中心にして配置されています。
太字で示されている変換
図7の中で、括弧で囲まれた太字は、プログラムによって実行される変換を示しています。赤色の太字で示されている4つの変換は、図8の入力GUIへのパラメータ入力を通じてユーザーが制御できる変換を表します(これらは、図8のGUIの左端の列に示されている変換に相当します)。
図7で黒色の太字で示されている変換は、ユーザーの制御が及ばないハードコードパラメータを使用します。たとえば、図7の先頭と末尾の近くにある2つの黒色の拡大縮小(scale)変換は、ColorCubeオブジェクトの寸法を拡大縮小して、図8に示されている3D軸として使用する細長いオブジェクトを作成するのに使用されます。同様に、図7の中央近くにある黒色の回転(rotate)変換は、ColorCubeオブジェクトが画面上に最初に表示されるときに、その青色の面がユーザーに向くように(z軸に対して垂直になるように)、オブジェクトを回転させるために使用されます。
redCubeオブジェクト
図7の先頭近くにあるredCubeという名前のColorCubeオブジェクトは、階層内のすべての変換の上に位置しています。そのため、どの変換の影響も受けずに、図8のユニバースの中心に本来の状態で表示されます。その本来の状態では、赤色の面がz軸に対して垂直であり、原点に配置されます。
赤色の平行移動変換および回転変換
図7の上部近くにある赤色の平行移動(translate)変換および回転(rotate)変換は、図8の入力GUIの左端の列に示されている上の2つの変換に対応します。この2つの変換は、階層のLeafにあたる残りの7個のColorCubeオブジェクトに影響します。この7個のLeafオブジェクトはすべて、rotatedGroupという名前のグループの子孫(子、孫、ひ孫など)であるTransformGroupオブジェクトに属するためです。
一番上の黒色の拡大縮小変換
しかし、図7でplainAxisGroupを使用する黒色の拡大縮小(scale)変換は、plainAxisGroupの子である3つのColorCubeオブジェクトにのみ影響します。この変換はそのグループのプロパティであり、他のColorCubeオブジェクトはそのグループの子ではありません。
赤色の平行移動変換および拡大縮小変換
図7の中央近くにある赤色の平行移動(translate)変換および拡大縮小(scale)変換は、図8の入力GUIの左端の列に示されている下の2つの変換に対応します。この2つの変換は、残りの4つのColorCubeオブジェクトに影響します。これらのオブジェクトがすべて、scaledGroupという名前のグループの子孫にあたるためです。階層の上にある4つのColorCubeオブジェクトには影響しません。
この階層関係を念頭に置く
プログラムを実行し、図7に赤色の太字で示されている4つの変換の動作を制御する入力パラメータを操作する際には、この階層の関係を念頭に置く必要があります。
十分な背景知識の次は、いよいよコードへ
背景となる知識はこの辺にして、いよいよプログラムを操作してみましょう。操作は簡単です。Java 3Dでの変換を作成し、使用する方法についても簡単に理解できることを願っています。
