Введение в программирование трехмерных игр с DX9



         

Окно приложения Lighting and Texturing Текстуры, материал и режимы освещения заданы в файле эффекта - часть 3


// Выводим любые сообщения об ошибках if(errorBuffer) { ::MessageBox(0, (char*)errorBuffer->GetBufferPointer(), 0, 0); d3d::Release<ID3DXBuffer*>(errorBuffer); }

if(FAILED(hr)) { ::MessageBox(0, "D3DXCreateEffectFromFile() - FAILED", 0, 0); return false; }

// // Сохраняем дескрипторы часто используемых параметров //

WorldMatrixHandle = LightTexEffect->GetParameterByName(0, "WorldMatrix"); ViewMatrixHandle = LightTexEffect->GetParameterByName(0, "ViewMatrix"); ProjMatrixHandle = LightTexEffect->GetParameterByName(0, "ProjMatrix"); TexHandle = LightTexEffect->GetParameterByName(0, "Tex"); LightTexTechHandle = LightTexEffect->GetTechniqueByName("LightAndTexture");

// // Устанавливаем параметры эффекта //

// Матрицы D3DXMATRIX W, P;

D3DXMatrixIdentity(&W); LightTexEffect->SetMatrix(WorldMatrixHandle, &W);

D3DXMatrixPerspectiveFovLH( &P, D3DX_PI * 0.25f, // 45 градусов (float)Width / (float)Height, 1.0f, 1000.0f);

LightTexEffect->SetMatrix(ProjMatrixHandle, &P);

// Текстура IDirect3DTexture9* tex = 0; D3DXCreateTextureFromFile(Device, "Terrain_3x_diffcol.jpg", &tex);

LightTexEffect->SetTexture(TexHandle, tex);

d3d::Release<IDirect3DTexture9*>(tex);

return true; }

Функция Display прямолинейна и выполняет действия, описанные в разделе 19.6:

bool Display(float timeDelta) { if(Device) { // // ...[Пропущено обновление камеры] //

// Устанавливаем обновленную матрицу вида LightTexEffect->SetMatrix(ViewMatrixHandle, &V);

// // Активируем технику и выполняем визуализацию //

Device->Clear(0, 0, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, 0xffffffff, 1.0f, 0); Device->BeginScene();

// Устанавливаем используемую технику LightTexEffect->SetTechnique(LightTexTechHandle);

UINT numPasses = 0; LightTexEffect->Begin(&numPasses, 0);

for(int i = 0; i < numPasses; i++) { LightTexEffect->Pass(i);

for(int j = 0; j < Mtrls.size(); j++) { Mesh->DrawSubset(j); } } LightTexEffect->End();

Device->EndScene(); Device->Present(0, 0, 0, 0); } return true; }




Содержание  Назад  Вперед