Japanese | English | Korean

Samples

ライト

ここではライトに関する操作について解説します。

ライト

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

環境光源 ( AMBIENT )

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

平行光源 ( DIRECTIONAL )

一定の方向から、面状に影響を及ぼす光源です。
位置の設定はありません。

点光源 ( OMNI )

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

スポット光源 ( SPOT )

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


各ライトの設定

ライトを設定するには Light クラスからインスタンスを生成、ライトのモードや色、その他の情報を設定した後、 Graphics3D オブジェクト、あるいは Group オブジェクトに追加することで行います。

以下各ライトに対し個別に必要とされる設定について解説します。なお、以下の例における環境光源はすべて同一の設定となっています。

  • 環境光源と平行光源

  • ここでは環境光源と平行光源について解説します。

    [環境光源と平行光源]


    ・・・

    // ライトのインスタンス
    // 環境光源
    Light ambLight = new Light();
    // 平行光源
    Light dirLight = new Light();

    ・・・

    // Sample08Canvas.java 92行
    // ライトの設定
    // 環境光源
    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 ) );

    ・・・

    // Sample08Canvas.java 148行
    // Graphics3D オブジェクトにライトを追加
    if ( _isLight ) {
    g3.addLight( ambLight, null );

    } else {
    g3.addLight( dirLight, null );

    }

    ・・・


    Light オブジェクトの種別を設定するためには setMode() メソッドを使用します。 Light.AMBIENT は環境光源であることを、 Light.DIRECTIONAL は平行光源であることを表します。 setColor() メソッドはライトの色を設定するものです。

    setIntensity() メソッドはライトの強度を設定するもので、基本的には 0 から 1 の間の float 型の値を引数にとります。 setVector() メソッドはライトの向きを設定するもので、値として Vector3D オブジェクトを持つことができます。環境光源や点光源の場合利用されません。

    また、 g3.addLight() メソッドによってライトを Graphics3D オブジェクトに追加することができます。

     

    ライトの描画(左画像:環境光源、右画像:平行光源)



  • 環境光源と点光源

  • ここでは点光源について解説します。

    [環境光源と点光源]


    ・・・

    // ライトのインスタンス
    // 点光源
    Light omnLight = new Light();

    ・・・

    // Sample09Canvas.java 98行
    // ライトの設定
    // 点光源
    omnLight.setMode( Light.OMNI );
    omnLight.setColor( 0x00ffffff );
    omnLight.setIntensity( 1.0f );
    omnLight.setAttenuation( 1, 0, 0 );
    omnLight.setPosition( new Vector3D( 0, 10, 0 ) );

    ・・・

    // Sample09Canvas.java 153行
    // Graphics3D オブジェクトにライトを追加
    g3.addLight( omnLight, null );

    ・・・


    環境光源同様 Light.OMNI は点光源を表します。
    setAttenuation() メソッドは光源の減衰量を設定するもので、初期状態 setAttenuation( 1, 0, 0 ) のとき減衰は行われません。環境光源や平行光源の場合利用されません。
    setPosition() メソッドは光源の位置を設定し、 Vector3D オブジェクトを値として持ちます。環境光源や平行光源の場合利用されません。


ライトの描画(点光源)

  • 環境光源とスポット

  • ここではスポットについて解説します。

    [環境光源とスポット]


    ・・・

    // ライトのインスタンス
    // スポット光源
    Light sptLight = new Light();

    ・・・

    // Sample10Canvas.java 98行
    // ライトの設定
    // スポット光源
    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 ) );

    ・・・

    // Sample10Canvas.java 156行
    // Graphics3D オブジェクトにライトを追加
    g3.addLight( sptLight, null );

    ・・・


    環境光源同様 Light.SPOT はスポット光源を表します。 setSpotAngle() メソッドはスポット光源の角度を設定します。このときの角度は度数法表記となります。
    setSpotExponent() メソッドはスポット光源の輝度分布を設定します。この例では均一な明るさとなるように設定しています。


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