我写了一个简单的程序来加载directX .x网格文件。我加载的图像显示为http://i37.tinypic.com/5dmo1s.png。
但MeshViewer显示的那个就像这个http://i34.tinypic.com/rkrhoh.png。
应该怎样做才能获得3D外观?我应该在DirectX库中调用哪个?
答案 0 :(得分: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);
}
如果您仍然没有看到任何内容,请设置您自己定义的材料。
答案 1 :(得分:1)
您是否将相同的文件加载到查看器中,而不是加载到您自己的应用程序中?因为它实际上看起来你在网格中没有任何法线。如果您使用与查看器相同的文件,它们应该在网格文件中。
除此之外,你的灯光非常明亮(所有值都是1.0),我会将漫反射值设置为0.0并尝试将环境设置为0.5红色。那么至少你可以判断你的灯是否正常工作。