将3D效果添加到2D对象 - DirectX

时间:2010-08-10 11:14:50

标签: c++ directx mesh

我写了一个简单的程序来加载directX .x网格文件。我加载的图像显示为http://i37.tinypic.com/5dmo1s.png

但MeshViewer显示的那个就像这个http://i34.tinypic.com/rkrhoh.png

应该怎样做才能获得3D外观?我应该在DirectX库中调用哪个?

2 个答案:

答案 0 :(得分:1)

您是否将相同的文件加载到查看器中,而不是加载到您自己的应用程序中?因为它实际上看起来你在网格中没有任何法线。如果您使用与查看器相同的文件,它们应该在网格文件中。

除此之外,你的灯光非常明亮(所有值都是1.0),我会将漫反射值设置为0.0并尝试将环境设置为0.5红色。那么至少你可以判断你的灯是否正常工作。

答案 1 :(得分:1)

看起来你没有设置任何灯光。

您必须加载网格中定义的材质,并设置至少一个光。

设置灯光后,使用DirectX 9中固定管道的渲染代码如下所示:

// 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);
}

如果您仍然没有看到任何内容,请设置您自己定义的材料。