我写了一个简单的程序来加载一个directX .x 网格文件。我加载的图像是这样显示的 。
应该怎么做才能获得 3D 外观?我应该在 DirectX 库中进行哪个调用?
看起来你没有设置任何灯。
您必须加载网格中定义的材质,并设置至少一盏灯。
设置灯光后,在 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.0),我将漫反射值设置为 0.0 并尝试将环境设置为 0.5 红色。然后至少你可以判断你的灯是否工作。