我在 3D 模型上使用带效果的 DirectX 9。我已经正确加载了所有模型和效果,并且过去使用这种方法渲染蒙皮网格没有任何问题......但是,我最近开始在我的项目中使用 DXUT。现在,使用 DXUT,当我尝试渲染蒙皮网格时,会出现效果问题。我已经找到了问题,但不知道如何解决。以下代码在调用 DrawMeshContainer( LPD3DXMESHONTAINER pMeshContainer ) 期间发生。问题是对 BeginPass()/EndPass() 的调用。使用此效果的所有网格都可以正确渲染,但是当我尝试渲染不使用该效果的对象时,它们会呈现完全黑色……您可以看到该对象,但没有颜色。我在对对象的渲染调用之前和之后检查了照明状态,但这似乎是有序的。这是问题行的代码。如果我将这些行注释掉,其他对象会正确呈现
for(DWORD iAttrib = 0; iAttrib < numAttributes; ++iAttrib)
{
...
DWORD numPasses = 0;
g_pEffect->Begin(&numPasses D3DFX_DONOTSAVESTATE); // writing from memory...2nd param may use different identifier
for(DWORD iPass = 0; iPass < numPasses; ++iPass)
{
g_pEffect->BeginPass(iPass); // Begin Problem
pMeshContainer->MeshData.pMesh->DrawSubset( iAttrib );
g_pEffect->EndPass(); // End Problem
}
g_pEffect->End();
m_d3ddev->SetVertexShader( NULL );
}
}
BeginPass()/EndPass() 是否会导致我需要考虑的某种类型的状态更改?我还尝试在调用 ID3DXMESH::DrawSubset() 上方使用 g_pEffect->CommitChanges() ,但没有成功……有什么想法吗?