1

私の DirectX9 サンプルでは、​​以下を実行するとすべて正常に動作し、画面上に目的の回転三角形が表示されます。

シェーダーなし

g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );
g_pd3dDevice->SetTransform( D3DTS_WORLD, &matWorld );

しかし、シェーダーを使用して同じことをしようとすると、何もレンダリングされません

D3DXMATRIXA16 matWorldViewProj = matWorld * matView * matProj;
constantTable->SetMatrix(g_pd3dDevice, "g_mWorldViewProjection", &matWorldViewProj);
//Vertex Shader snippet
Output.Position = mul(In.Position,g_mWorldViewProjection);

頂点シェーダーで以下の変更を行ったとき

Output.Position =  In.Position;

画面にレンダリングされた静的な三角形を取得します。

ここに画像の説明を入力

私のコード/テクニックで考えられるエラーは何ですか?

(プロファイル: D3DXCompileShaderFromFile を使用する vs_3_0 )

4

1 に答える 1

2

ピクセルシェーダーのコンパイル時に、変数を上書きしますconstantTable。したがって、マトリックスはピクセルシェーダーにのみ設定され、頂点シェーダーには設定されません。追加の変数を宣言するか、ピクセルシェーダーに情報を渡す必要がない場合constantTablePixはパラメーターをに設定します。NULL

マトリックスの正しい順序はです。(私は注文を正しくすることは決してありませんが、今はうまくいきます:))

D3DXMATRIXA16 matWorldViewProj = matWorld * matView * matProj;  
于 2012-11-26T16:44:55.507 に答える