ライトは照明効果を表すことができるエフェクトで、以下の4種類があります。
すべての方向からの光源です。
オブジェクトの位置、角度によらず影響を及ぼします。
位置、方向の設定はありません。
一定の方向から照らす光源です。
位置の設定はありません。
特定の座標に置かれ、すべての方向に放射される光源です。
距離により減衰させることが可能です。
方向の設定はなく、光源とオブジェクトとの位置関係のみ問題となります。
特定の座標に置かれ、ある一定の円錐状の範囲に放射される光源です。
距離により減衰させることが可能です。
各ライトの設定
ライトの設定は Light クラスからインスタンスを生成、ライトのモードや色、その他の情報を登録した後、 Graphics3D オブジェクト、あるいは World オブジェクトや、 Group オブジェクトに追加することで行います。
以下各ライトに対し個別に必要とされる設定について解説します。なお、以下の例における環境光源はすべて同一の設定となっています。
1. 環境光源と平行光源
ここでは環境光源と平行光源について解説します。
[ 環境光源と平行光源 ]private Light ambLight = new Light ();
private Light dirLight = new Light ();
( 中略 )
/* ライトの設定 */
ambLight.setMode ( Light.AMBIENT );
ambLight.setColor ( 0x00ffffff );
ambLight.setIntensity ( 1.f );
dirLight.setMode ( Light.DIRECTIONAL );
dirLight.setColor ( 0x00ffffff );
dirLight.setIntensity ( 1.f );
dirLight.setOrientation ( -45.f, 1.f, -0.9f, 0.f );
myWorld.addChild ( ambLight );
( 中略 )
/* ライトの変更 */
if ( !isLight ) {
myWorld.addChild ( ambLight );
myWorld.addChild ( dirLight );
Light オブジェクトの種別を設定するためには setMode() メソッドを使用します。 Light.AMBIENT は環境光源であることを、 Light.DIRECTIONAL は平行光源であることを表します。 setColor() メソッドはライトの色を設定し、 setIntensity() メソッドはライトの強度を設定します。 setOrientation() メソッドはライトの向きを設定するもので、環境光源や点光源の場合利用されません。
Light クラスは Node クラスのサブクラスであるため、 Wrold クラスに対し子ノードとして追加することができます。このとき使用するメソッドは addChild() メソッドです。
![]() 環境光源 |
![]() 平行光源 |
2. 環境光源と点光源
ここでは点光源について解説します。
[ 環境光源と点光源 ]private Light omnLight = new Light ();
( 中略 )
/* ライトの設定 */
omnLight.setMode ( Light.OMNI );
omnLight.setColor ( 0x00ffffff );
omnLight.setIntensity ( 1.f );
omnLight.setAttenuation ( 1.f, 0.05f, 0.f );
omnLight.setTranslation ( 0.f, 1.7f, 1.f );
環境光源同様 Light.OMNI は点光源を表します。 setAttenuation() メソッドはライトの減衰量を設定するもので、初期状態 setAttenuation ( 1.f, 0.f, 0.f ) のとき減衰は行われません。setTranslation() メソッドはライトの位置を設定します。引数としてライトの位置座標を取ります。ともに環境光源や平行光源の場合利用されません。

ライトの描画(点光源)
3. 環境光源とスポット光源
ここではスポット光源について解説します。
[ 環境光源とスポット光源 ]private Light sptLight = new Light();
( 中略 )
/* ライトの設定 */
sptLight.setMode ( Light.SPOT );
sptLight.setColor ( 0x00ffffff );
sptLight.setIntensity ( 1.f );
sptLight.setAttenuation ( 1.f, 0.05f, 0.f );
sptLight.setSpotAngle ( 45.f );
sptLight.setSpotExponent ( 0.05f );
sptLight.setTranslation ( 0.f, 3.5f, 2.f );
sptLight.setOrientation ( -60.f, 1.f, 0.f, 0.f );
環境光源同様 Light.SPOT はスポット光源を表します。 setSpotAngle() メソッドはスポット光源の角度を設定します。このときの角度は度数法表記となります。 setSpotExponent() メソッドはスポット光源の輝度分布を設定します。値が高いほど中心が密な光源となります。

ライトの描画 ( スポット光源 )


