Добавление 3D-эффектов в 2D-объект - DirectX - PullRequest
0 голосов
/ 10 августа 2010

Я написал простую программу для загрузки файла сетки DirectX .x.Мое загруженное изображение отображается так: http://i37.tinypic.com/5dmo1s.png.

Но то, что показывает MeshViewer, выглядит так: http://i34.tinypic.com/rkrhoh.png.

Что нужно сделать, чтобы получить 3D-вид?Какой вызов из библиотеки DirectX мне следует сделать?

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Загружаете ли вы тот же файл в программу просмотра, что и в собственное приложение? Потому что на самом деле это выглядит так, как будто у вас нет нормалей в сетке. Если вы используете тот же файл, что и средство просмотра, они должны быть в файле сетки.

Кроме этого, ваше освещение невероятно яркое (все значения на уровне 1,0), я бы установил диффузные значения на 0,0 и попытался бы установить цвет окружающей среды на 0,5 красного. Тогда, по крайней мере, вы можете сказать, работает ли ваш свет.

1 голос
/ 10 августа 2010

Похоже, вы не включили свет.

Вы должны загрузить материалы, определенные в сетке, и установить хотя бы один источник света.

После того, как вы установили источник света, код рендеринга с использованием фиксированного конвейера в DirectX 9 выглядит следующим образомthis:

// NumMaterials and ShipMaterialshave already been loaded with the call to D3DXLoadMeshFromX
D3DXMATERIAL* ShipMats = (D3DXMATERIAL*) ShipMaterials->GetBufferPointer();
device->SetTexture(0, NULL); // assume a mesh with no texture
for (DWORD i = 0; i < NumMaterials; ++i) 
{
    device->SetMaterial(&ShipMats[i].MatD3D);
    this->pShipMesh->DrawSubset(i);
}

Если вы все еще ничего не видите, установите материал, который вы определили сами.

...