1

我在 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() ,但没有成功……有什么想法吗?

4

1 回答 1

1

问题已修复...我必须在过程结束时将像素着色器和顶点着色器一起设置为 NULL:

m_d3ddev->SetPixelShader( NULL )...
于 2012-12-23T03:52:11.750 回答