Japanese | English | Korean

Samples


ライトは照明効果を表すことができるエフェクトで、以下の4種類があります。

環境光源 ( AMBIENT )

すべての方向からの光源です。
オブジェクトの位置、角度によらず影響を及ぼします。
位置、方向の設定はありません。

平行光源 ( DIRECTIONAL )

一定の方向から照らす光源です。
位置の設定はありません。

点光源 ( OMNI )

特定の座標に置かれ、すべての方向に放射される光源です。
距離により減衰させることが可能です。
方向の設定はなく、光源とオブジェクトとの位置関係のみ問題となります。

スポット光源 ( SPOT )

特定の座標に置かれ、ある一定の円錐状の範囲に放射される光源です。
距離により減衰させることが可能です。



各ライトの設定

ライトの設定は 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.removeChild ( dirLight );
myWorld.addChild ( ambLight );
} else {
myWorld.removeChild ( 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() メソッドはスポット光源の輝度分布を設定します。値が高いほど中心が密な光源となります。


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