【问题标题】:DirectX ID3DXEFFECT::BeginPass()/EndPass() problemsDirectX ID3DXEFFECT::BeginPass()/EndPass() 问题
【发布时间】:2012-12-22 20:31:31
【问题描述】:

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

【问题讨论】:

    标签: c++ winapi directx effects directx-9


    【解决方案1】:

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

    m_d3ddev->SetPixelShader( NULL )...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多