Я использую DirectX 9 с эффектами на 3D-моделях. Я правильно загрузил все модели и эффекты и с помощью этого метода без проблем использовал рендеринг скиновой сетки … однако недавно я начал использовать 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 () изменение состояния какого-либо типа, который мне нужно учитывать? Я также попытался использовать g_pEffect-> CommitChanges () над вызовом ID3DXMESH :: DrawSubset () безуспешно … есть идеи?
проблема решена … мне пришлось установить пиксельный шейдер на NULL вместе с вершинным шейдером в конце процесса:
m_d3ddev->SetPixelShader( NULL )...
Других решений пока нет …