Ну, вопрос говорит об этом. Когда у меня отключен свет (pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
), я получаю цвета, как ожидалось, когда я устанавливаю его в true, я получаю чистый черный цвет, даже если я устанавливаю окружающий свет, но это исправлено при установке материала. Но цвета вершин игнорируются полностью, и я получаю только цвет окружающего света.Вершины DirectX 9 при включении освещения?
Поиск до сих пор: Единственная полезная статья, я заметил это vertex lighting tutorial, но удаляет диффузный цвет из вершин, и вместо этого добавляет нормальный вектор. Также на MSDN, относительно диффузного освещения, он не ссылается на цвет вершины. Я начинаю подозревать, что цвет вершины, как и значение RHW, обычно вычисляется во время выполнения, а установка во время объявления просто дает цвет без необходимости освещения. Это оно?
освещение-код, связанный с:
pd3dDevice->SetRenderState(D3DRS_LIGHTING, TRUE);
pd3dDevice->SetRenderState(D3DRS_COLORVERTEX, TRUE); // not sure if needed
pd3dDevice->SetRenderState(D3DRS_AMBIENT, D3DCOLOR_ARGB(22, 255, 255, 255)); // no visible difference on A
pd3dDevice->SetRenderState(D3DRS_SHADEMODE, D3DSHADE_GOURAUD); // probably not needed yet, can't harm
D3DMATERIAL9 material;
D3DCOLORVALUE zeroColor;
D3DCOLORVALUE oneColor;
zeroColor.a = 0;
zeroColor.r = 0;
zeroColor.g = 0;
zeroColor.b = 0;
oneColor.a = 0; // no perceivable difference between 0 and 1
oneColor.r = 1;
oneColor.g = 1;
oneColor.b = 1;
material.Ambient = oneColor;
material.Diffuse = zeroColor; //setting it to oneColor has no effect
material.Emissive = zeroColor;
material.Power = 0; //no difference if 0 or 1
material.Specular = zeroColor;
pd3dDevice->SetMaterial(&material);