ライト
ライトは照明効果を表すことができるエフェクトで、以下の4種類があります。
環境光源 ( AMBIENT )
すべての方向からの光源です。
オブジェクトの位置、角度によらず影響を及ぼします。
位置、方向の設定はありません。
一定の方向から、面状に影響を及ぼす光源です。
位置の設定はありません。
特定の座標に置かれ、すべての方向に放射される光源です。
距離により減衰させることが可能です。
方向の設定はなく、光源とオブジェクトとの位置関係のみ問題となります。
特定の座標に置かれ、ある一定の円錐状の範囲に放射される光源です。
距離により減衰させることが可能です。
各ライトの設定
ライトを設定するには Light クラスからインスタンスを生成、ライトのモードや色、その他の情報を設定した後、 Graphics3D オブジェクト、あるいは Group オブジェクトに追加することで行います。
以下各ライトに対し個別に必要とされる設定について解説します。なお、以下の例における環境光源はすべて同一の設定となっています。
- 環境光源と平行光源
- 環境光源と点光源
ここでは環境光源と平行光源について解説します。
[環境光源と平行光源]
・・・
// 環境光源
Light ambLight = new Light();
// 平行光源
Light dirLight = new Light();
・・・
// 環境光源
ambLight.setMode( Light.AMBIENT );
ambLight.setColor( 0x00ffffff );
ambLight.setIntensity( 1.0f );
// 平行光源
dirLight.setMode( Light.DIRECTIONAL );
dirLight.setColor( 0x00ffffff );
dirLight.setIntensity( 1.0f );
dirLight.setVector( new Vector3D( 1, -1, -1 ) );
・・・
if ( _isLight ) {
} else {
}
・・・
Light オブジェクトの種別を設定するためには setMode() メソッドを使用します。 Light.AMBIENT は環境光源であることを、 Light.DIRECTIONAL は平行光源であることを表します。 setColor() メソッドはライトの色を設定するものです。
setIntensity() メソッドはライトの強度を設定するもので、基本的には 0 から 1 の間の float 型の値を引数にとります。 setVector() メソッドはライトの向きを設定するもので、値として Vector3D オブジェクトを持つことができます。環境光源や点光源の場合利用されません。
また、 g3.addLight() メソッドによってライトを Graphics3D オブジェクトに追加することができます。
ライトの描画(左画像:環境光源、右画像:平行光源)
ここでは点光源について解説します。
[環境光源と点光源]
・・・
// 点光源
Light omnLight = new Light();
・・・
// 点光源
omnLight.setMode( Light.OMNI );
omnLight.setColor( 0x00ffffff );
omnLight.setIntensity( 1.0f );
omnLight.setAttenuation( 1, 0, 0 );
omnLight.setPosition( new Vector3D( 0, 10, 0 ) );
・・・
・・・
環境光源同様 Light.OMNI は点光源を表します。
setAttenuation() メソッドは光源の減衰量を設定するもので、初期状態 setAttenuation( 1, 0, 0 ) のとき減衰は行われません。環境光源や平行光源の場合利用されません。
setPosition() メソッドは光源の位置を設定し、 Vector3D オブジェクトを値として持ちます。環境光源や平行光源の場合利用されません。

ライトの描画(点光源)
ここではスポットについて解説します。
[環境光源とスポット]
・・・
// スポット光源
Light sptLight = new Light();
・・・
// スポット光源
sptLight.setMode( Light.SPOT );
sptLight.setColor( 0x00ffffff );
sptLight.setIntensity( 1.0f );
sptLight.setAttenuation( 1, 0, 0 );
sptLight.setSpotAngle( 45 );
sptLight.setSpotExponent( 0 );
sptLight.setVector( new Vector3D( -1, -1, -1 ) );
sptLight.setPosition( new Vector3D( 5, 10, 10 ) );
・・・
・・・
環境光源同様 Light.SPOT はスポット光源を表します。 setSpotAngle() メソッドはスポット光源の角度を設定します。このときの角度は度数法表記となります。
setSpotExponent() メソッドはスポット光源の輝度分布を設定します。この例では均一な明るさとなるように設定しています。

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

