Japanese | English | Korean

Samples

라이트

MascotCapsule V3 에서는 환경광과 평행광원의 2종류가 준비되어 있습니다.

목차


1.환경광 ( Ambient Light )

환경광은 월드 내를 한결같이 비추는 라이트입니다. MascotCapsule V3 에서는 백색광만이 준비되어 습니다. 환경광을 사용하려면 OEMC_Micro3D_Render_setAmbientLight(Render *render, hi_sint32 intensity)를 호출합니다. 제2인수의 intensity는 라이트의 세기입니다. 0 - 4096의 범위 내에서 지정해 주세요. 4096이 원래의 texture의 색이 됩니다.



2.평행광원 ( Direction Light )

평행 광원은 월드 내를 일정한 방향에서 비추는 라이트입니다. MascotCapsule V3 에서는 백색광원만이 준비되어 있습니다.

평행 광원을 사용하려면 OEMC_Micro3D_Render_setDirectionLight(Render *render, Vec3i dir, hi_sint32 intensity)를 호출해서 한층 더 OEMC_Micro3D_Render_setAttribute(Render *render, hi_sint32 attribute)로 M3D_LIGHTING 또는, M3D_TOON_SHADING를 유효하게 합니다. M3D_LIGHTING과 M3D_TOON_SHADING의 차이에 대해서는 쉐이딩에 대해 쓰여진 튜토리얼을 참조해 주세요. OEMC_Micro3D_Render_setDirectionLight()의 제2 인수의 dir은 라이트의 방향입니다. x, y, z의 각 성분을 Vec3i 오브젝트를 이용하여 지정해 주세요. 제3 인수의 intensity는 라이트의 세기입니다. 0 - 4096의 범위 내에서 지정해 주세요.

또 환경광과 평행광원은 조합해 사용하는 것이 가능합니다만, 그 밝기는 원래의 texture의 색(4096)까지 입니다. 환경광과 평행광원을 맞춘 밝기가 4096을 넘었을 경우는 가장 밝은 부분이 4096이 되도록 조정됩니다.

환경광 + 평행광원 환경광만
평행광원만 광원 없음




3.샘플 코드

이 메뉴얼의 샘플 코드의 라이트의 설정을 하고 있는 부분을 아래에 나타냅니다. 샘플에서는 결정 키로 평행광원, 5키로 환경광의 온•오프의 변환을 할 수가 있습니다. 또 방향 키로 평행광원의 방향을 바꾸는 것이 가능합니다.

/**
 * 라이트 설정
 */

static void setLight( void )
{
Atrans3i xtrans, ytrans;

/* 평행광원 */
if( isDirection ){
light_dir.x = 0;
light_dir.y = 0;
light_dir.z = 4096;
/* 회전 행렬 초기화 */
OEMC_Micro3D_Atrans3i_setIdentity( &xtrans );
OEMC_Micro3D_Atrans3i_setIdentity( &ytrans );
/* 회전 행렬 설정 */
OEMC_Micro3D_Atrans3i_setRotateX( &xtrans, rotX );
OEMC_Micro3D_Atrans3i_setRotateY( &ytrans, rotY );
/* 라이트 방향 벡터 변환 */
OEMC_Micro3D_Atrans3i_transPoint(
&xtrans, &light_dir, &light_dir );
OEMC_Micro3D_Atrans3i_transPoint(
&ytrans, &light_dir, &light_dir );
/* 평행 광원 설정 */
OEMC_Micro3D_Render_setDirectionLight(
&render, &light_dir, dir_light_intensity );
}else{
OEMC_Micro3D_Render_setDirectionLight(
&render, &light_dir, 0 );
}

/* 환경광 */
if( isAmbient ){
OEMC_Micro3D_Render_setAmbientLight(
&render, amb_light_intensity );
}else{
OEMC_Micro3D_Render_setAmbientLight( &render, 0 );
}
}