Japanese | English | Korean

Samples


1. ライトの種類

MascotCapsule V4 では使用できるライトとして次の4種類が用意されています。

環境光源 ( AMBIENT )

すべての方向からやってくる光です。
オブジェクトの位置、角度によらず影響を及ぼします。
位置、方向は照明効果に影響しません。

平行光源 ( DIRECTIONAL )

一定の方向から面状に影響を及ぼす光源です。
方向が照明効果に影響します。

点光源 ( OMNI )

特定の座標に置かれ、すべての方向に放射される光源です。
距離により減衰させることが可能です。
光源とオブジェクトの位置関係が照明効果に影響します。

スポット光源 ( SPOT )

特定の座標に置かれ、ある一定の円錐状の範囲に放射される光源です。
距離により減衰させることが可能です。
位置、方向ともに照明効果に影響します。



2. ライトの設定

ライトには光源タイプや色、強度などの設定があります。また、減衰係数など、特定のタイプにのみ有効な設定もあります。
以下では、ライトの種類ごとに、その設定方法を解説していきます。

2.1. 環境光源

/* 環境光源の作成 */
pmc -> pAmbLight = IMICRO3Dv4es_m3dLight_create( pMe -> pIM3D );
if ( pmc -> pAmbLight == NULL ) {
return FALSE;
}

IMICRO3Dv4es_m3dLight_setMode( pMe -> pIM3D, pmc -> pAmbLight, m3dLight_AMBIENT );
IMICRO3Dv4es_m3dLight_setColor( pMe -> pIM3D, pmc -> pAmbLight, 0xffffff );
IMICRO3Dv4es_m3dLight_setIntensity( pMe -> pIM3D, pmc -> pAmbLight, 1.f );

( 中略 )

/* 光源の設定 */
IMICRO3Dv4es_m3dGroup_addChild( pMe -> pIM3D, ( m3dGroup* ) pmc -> pWorld, ( m3dNode* ) pmc -> pAmbLight );

m3dLight オブジェクトの光源タイプを設定するには IMICRO3Dv4es_m3dLight_setMode( inst, light, mode ) メソッドを使用します。 m3dLight_AMBIENT は環境光源を表します。環境光源の場合はライトの位置や方向は影響しないため、ここでは光の色と強度のみを設定しています。
シーングラフの描画でライトを有効にするには、ライトをシーングラフに追加する必要があります。m3dLight クラスは m3dNode クラスのサブクラスであり、 m3dWrold クラスに対し子ノードとして追加することができます。子ノードの追加には IMICRO3Dv4es_m3dGroup_addChild() メソッドを用います。

2.2. 平行光源

/* 平行光源の作成 */
pmc -> pDirLight = IMICRO3Dv4es_m3dLight_create( pMe -> pIM3D );
if ( pmc -> pDirLight == NULL ) {
return FALSE;
}

IMICRO3Dv4es_m3dLight_setMode( pMe -> pIM3D, RO3Dv4es_m3dLight_setColor( pMe -> pIM3D, pmc -> pDirLight, 0xffffff );
IMICRO3Dv4es_m3dLight_setIntensity( pMe -> pIM3D, pmc -> pDirLight, 1.f );
IMICRO3Dv4es_m3dTransformable_setOrientation( pMe -> pIM3D, ( m3dTransformable* ) pmc -> pDirLight, -30.f, 1.f, 0.f, 0.f );

m3dLight_DIRECTIONAL は平行光源を表します。平行光源はライトの向きの影響をうけるため、ここでは IMICRO3Dv4es_m3dTransformable_setOrientation() メソッドを用いてライトの方向を設定しています。

2.3. 点光源

/* 点光源の作成 */
pmc -> pOmnLight = IMICRO3Dv4es_m3dLight_create( pMe -> pIM3D );
if ( pmc -> pOmnLight == NULL ) {
return FALSE;
}

IMICRO3Dv4es_m3dLight_setMode( pMe -> pIM3D, pmc -> pOmnLight, m3dLight_OMNI );
IMICRO3Dv4es_m3dLight_setColor( pMe -> pIM3D, pmc -> pOmnLight, 0xffffff );
IMICRO3Dv4es_m3dLight_setIntensity( pMe -> pIM3D, pmc -> pOmnLight, 1.25f );
IMICRO3Dv4es_m3dLight_setAttenuation( pMe -> pIM3D, pmc -> pOmnLight, 1.f, 0.05f, 0.f ); IMICRO3Dv4es_m3dTransformable_setTranslation( pMe -> pIM3D, ( m3dTransformable* ) pmc -> pOmnLight, 0.f, 1.7f, 1.f );

m3dLight_OMNI は点光源を表します。 IMICRO3Dv4es_m3dLight_setAttenuation(inst, light, constant, linear, quadric) は光の減衰係数を設定するものです。初期状態 (constant, linear, quadric) = (1.f, 0.f, 0.f) のとき、光は減衰しません。点光源はライトの位置の影響をうけるため、ここでは IMICRO3Dv4es_m3dTransformable_setTranslation() メソッドを用いてライトの位置を設定しています。

2.4. スポット光源

/* スポットライトの作成 */
pmc -> pSptLight = IMICRO3Dv4es_m3dLight_create( pMe -> pIM3D );
if ( pmc -> pSptLight == NULL ) {
return FALSE;
}

IMICRO3Dv4es_m3dLight_setMode( pMe -> pIM3D, pmc -> pSptLight, m3dLight_SPOT );
IMICRO3Dv4es_m3dLight_setColor( pMe -> pIM3D, pmc -> pSptLight, 0xffffff );
IMICRO3Dv4es_m3dLight_setIntensity( pMe -> pIM3D, pmc -> pSptLight, 1.25f );
IMICRO3Dv4es_m3dLight_setAttenuation( pMe -> pIM3D, pmc -> pSptLight, 1.f, 0.05f, 0.f );
IMICRO3Dv4es_m3dLight_setSpotAngle ( pMe -> pIM3D, pmc -> pSptLight, 45.f );
IMICRO3Dv4es_m3dLight_setSpotExponent ( pMe -> pIM3D, pmc -> pSptLight, 0.05f );
IMICRO3Dv4es_m3dTransformable_setTranslation( pMe -> pIM3D, ( m3dTransformable* ) pmc -> pSptLight, 0.f, 3.5f, 2.f );
IMICRO3Dv4es_m3dTransformable_setOrientation( pMe -> pIM3D, ( m3dTransformable* ) pmc -> pSptLight, -60.f, 1.f, 0.f, 0.f );

m3dLight_SPOT はスポット光源を表します。スポット光源はライト効果が指定角度の範囲に限定されます。
IMICRO3Dv4es_m3dLight_setSpotAngle( inst, light, angle ) は照明円錐角度を設定するメソッドで、 IMICRO3Dv4es_m3dLight_setSpotExponent( inst, light, exponent ) は照明の強度を制御する指数を設定するメソッドです。スポット光源はライトの位置・方向の影響を受けます。


環境光源

方向光源

点光源

スポット光源

各光源の描画結果