Japanese | English | Korean

Samples

ライト

MascotCapsule V3では、環境光と平行光源の2種類が用意されています。光源を有効にするには、ライトに関する属性を設定する必要があります。属性には、IMICRO3D_Render_setAttribute()を使用します。環境属性設定後の環境光・平行光源の設定についての説明を以下に示します。

目次

1. 環境光( Ambient Light )

環境光はワールド内を一様に照らすライトです。
環境光を使用する場合は、IMICRO3D_Render_setAmbient()を使用し、環境光の強さを設定します。強さは、0~4096の範囲で設定してください。4096 が元のテクスチャの色になります。環境光を使用しないようにする場合は明るさを 0 に設定してください。



2. 平行光源( Direction Light )

平行光源はワールド内を一定の方向から照らすライトです。
平行光源を使用する場合は、IMICRO3D_Render_setDirectionLight()を使用し、光源の方向と強さを設定します。光源の方向は、視点座標系での光源方向を Vec3i で指定します。明るさは 0~4096 の範囲内で設定してください。平行光源を使用しないようにする場合は明るさを 0 に設定してください。

また、環境光と平行光源を組み合わせて使用する場合、その明るさは元のテクスチャの色(4096)までです。環境光と平行光源を合わせた明るさが4096を超えた場合は、最も明るい部分が4096になるように調整されます。

 
環境光+平行光源 環境光のみ
 
平行光源のみ 光源無し



3.サンプルコード

本サンプルコードにおいて光源の設定をしている部分を以下に示します。サンプルではソフトキーで平行光源、環境光のオン・オフの切り替えができます。また、方向キーで平行光源の向きを変えることが可能です。

/*----- 環境属性の設定 -----*/
IMICRO3D_Render_setAttribute( pMe  -> pIM3D,
     &pMe -> mc_data.render,
     pMe   -> mc_data.attr | M3D_LIGHTING );

/*----- 光源の方向ベクトル -----*/
pMe -> mc_data.light_vec.x   = 0;
pMe -> mc_data.light_vec.y   = 0;
pMe -> mc_daa.light_vec.z    = 4096;

/*----- キーチェックによる光源の調整 -----*/
/* softkey1 : 平行光源の調整 */
if ( ( mask & SOFT1_MASK ) != 0 )                   /* soft key 1 pressed */
{
if( pMe -> mc_data.Dir_flag == HI_TRUE)
{
pMe -> mc_data.Dir_flag = HI_FALSE;
pMe -> mc_data.dir       = INTENSITY_HIGH;
}
else
{
pMe -> mc_data.Dir_flag = HI_TRUE;
pMe -> mc_data.dir       = INTENSITY_LOW;
}

pMe -> key_mask = 0;
}

/* softkey2 : 環境光の調整 */
if ( ( mask & SOFT2_MASK ) != 0 )
{
if( pMe -> mc_data.Amb_flag == HI_TRUE)
{
pMe -> mc_data.Amb_flag = HI_FALSE;
pMe -> mc_data.amb       = INTENSITY_HIGH;
}
else
{
pMe -> mc_data.Amb_flag = HI_TRUE;
pMe -> mc_data.amb       = INTENSITY_LOW;
}

pMe -> key_mask = 0;
}

/*----- 光源の設定 -----*/
/* 平行光源の設定 */
IMICRO3D_Render_setDirectionLight( pMe  -> pIM3D,
&pMe -> mc_data.render,
&pMe -> mc_data.light_vec,
pMe   -> mc_data.dir );

/* 環境光の設定 */
IMICRO3D_Render_setAmbientLight( pMe -> pIM3D, &pMe -> mc_data.render, pMe -> mc_data.amb );