Из конструктора главного окна вытащите:
D3DXVECTOR3 vecDir;
И перенесите его в класс рамки окна:
class CMainWnd : public CFrameWnd { . . . public: D3DXVECTOR3 vecDir; // вектор направленного источника света . . .
Перейдем в функцию Transform3D и остановим вращение сцены установив ее под некоторым углом, чтобы удобней нам было видно:
D3DXMatrixRotationY (&matWorld, 1.0);
Можете скомпилировать и посмотреть, что у нас получилось. Добавляем в Transform3D():
static float y=0; y+=(float)0.01; vecDir = D3DXVECTOR3 (sinf(y)*1, -cosf(y)*1, cosf(y)*1); D3DXVec3Normalize ((D3DXVECTOR3*)&light.Direction, &vecDir); p_d3d_Device->SetLight (0, &light);
Все :) свет летает вокруг нашего объекта. Все эти функции вам уже знакомы. Теперь, вспомните, у нас есть одна функция, которая вам скорее всего непонятна:
p_d3d_Device->SetRenderState (D3DRS_AMBIENT, 0);
Установите вместо 0, скажем, 100 или больше и посмотрите что будет :) Ниже показан один из кадров анимации: