我在 3D 模型上使用带效果的 DirectX 9。我已经正确加载了所有模型和效果,并且使用这种方法渲染蒙皮网格在过去没有任何问题......但是,我最近开始在我的项目中使用 DXUT。现在,使用 DXUT,当我尝试渲染带有效果的蒙皮网格时,出现了问题。我已经找到问题所在,但不知道如何解决。以下代码发生在调用 DrawMeshContainer ( LPD3DXMESHCONTAINER 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() 但没有成功……有什么想法吗?
最佳答案
问题已解决...我必须在过程结束时将像素着色器与顶点着色器一起设置为 NULL:
m_d3ddev->SetPixelShader( NULL )...
关于c++ - DirectX ID3DXEFFECT::BeginPass()/EndPass() 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14006369/