1

3D モデルで DirectX 9 w/effects を使用しています。すべてのモデルとエフェクトを正しくロードし、この方法を使用してスキニング メッシュをレンダリングしましたが、これまで問題はありませんでしたが、最近、自分のプロジェクトで DXUT を使い始めました。現在、DXUT を使用してスキン メッシュをエフェクト付きでレンダリングしようとすると、問題が発生します。問題を追跡しましたが、修正方法がわかりません。次のコードは、DrawMeshContainer( LPD3DXMESHCONTAINER pMeshContainer ) の呼び出し中に発生します。問題は、BeginPass()/EndPass() の呼び出しです。このエフェクトを使用するすべてのメッシュは適切にレンダリングされますが、エフェクトを使用しないオブジェクトをレンダリングしようとすると、完全に黒色でレンダリングされます...オブジェクトは見えますが、色はありません。オブジェクトへの render 呼び出しの前後でライティングの状態を確認しましたが、問題ないようです。問題のある行のコードは次のとおりです。これらの行をコメントアウトすると、他のオブジェクトが正しくレンダリングされます

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 に答える