トップページ > Java3D入門 > Javaのキーボード入力(5)

ライトの適用範囲を変える

前回のテストプログラムで…

前回のテストプログラムでは、図形を少し動かしただけで見えなくなってしまいました。 これは、ライトの適用範囲が小さすぎたからです。

前回のソースコードの、「ライトの設定」のところで以下のような記述がありました。

  BoundingSphere bounds = new BoundingSphere();
  light.setInfluencingBounds(bounds);

この2行でライトの効果範囲を設定しています。“BoundingSphere”(バウンディング・スフィア) は、ライトの効果が及ぶ範囲を球形にするために作っているオブジェクトです。 このコンストラクタの引数に何も入れないと、自動的に半径1の円が設定されてしまいます。 前回のテストプログラムでは、動かす立方体の1辺の長さが1だったので、すぐはみ出てしまっていたことになります。 これを解決するために、もっと球形領域の大きさを大きくします。

BoundingSphere bounds = new BoundingSphere( new Point3d( 0.0f , 0.0f , 0.0f ) , 1000);

上のように、BoundingSphereの定義を書き換えます。コンストラクタの第一引数は球の原点の座標です。 球の原点の座標はワールド座標の原点と一致していたほうが分かりやすいため、こうしました。 第二引数は球の半径です。今回は1000としました。大きいほうが良いだろう…というだけです。 特に深く考えていません(^^;


ライトの効果範囲を変更すると、画面内であればどこでも描画されるようになります。 物体を動かしてみて初めて気づく点というのは、意外とたくさんあります。 まわりくどいかもしれませんが、このJava3D入門では敢えて間違ったテストプログラムを試して、 その上で原因を検証するという普通の開発の流れをそのまま行うスタイルをとっていきます。




前へ   次へ