Direct3D для Visual C++ Урок 19. Использование освещения в DirectX 2
Продолжаем заниматься освещением в нашем приложении.
Теперь нам надо заняться непосредственно светом. Для этого мы заведем несколько переменных, инициализируем их и т. п. Все это мы вынесем в отдельный метод SetupLights:
VOID SetupLights()
{
D3DMATERIAL9 mat; // Материал.
D3DLIGHT9 light; // Свет.// Установка материала.
ZeroMemory( &mat, sizeof(mat) );
mat.Diffuse.r = mat.Ambient.r = 1.0f;
mat.Diffuse.g = mat.Ambient.g = 1.0f;
mat.Diffuse.b = mat.Ambient.b = 1.0f;
//mat.Diffuse.a = mat.Ambient.a = 1.0f;
g_pd3dDevice->SetMaterial(&mat);
// Установка света.
ZeroMemory(&light, sizeof(light));
light.Type = D3DLIGHT_DIRECTIONAL;
light.Diffuse.r = 1.0f;
light.Diffuse.g = 1.0f;
light.Diffuse.b = 1.0f;
// Установка направления света.
D3DXVECTOR3 dir = D3DXVECTOR3(1, -1, 1);
D3DXVec3Normalize( (D3DXVECTOR3*)&light.Direction, &dir );
// Установка света в DirectX устройстве.
g_pd3dDevice->SetLight( 0, &light );
g_pd3dDevice->LightEnable( 0, TRUE );
g_pd3dDevice->SetRenderState( D3DRS_LIGHTING, TRUE );
}
Теперь нам осталось наш метод SetupLights где-то вызвать. Это мы сделаем в методе Render - в начале отрисовки сцены: