DirectX9中顶点着色器代码中的矩阵映射错误

时间:2012-11-25 18:31:13

标签: hlsl directx-9

在我的DirectX9示例中,当我执行以下操作时,一切正常,我在屏幕上获得所需的旋转三角形,

without shaders

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;

我在屏幕上呈现了静态三角形。

enter image description here

我的代码/技术可能出现什么错误?

( profile:vs_3_0使用D3DXCompileShaderFromFile )

1 个答案:

答案 0 :(得分:2)

在编辑pixelhader时,您会覆盖变量constantTable。因此,矩阵仅在像素着色器中设置,而不在顶点着色器中设置。如果您不需要将信息传递给pixelshader,您可以声明一个额外的变量constantTablePix或将参数设置为NULL

矩阵的正确顺序是。 (我从来没有得到正确的订单,但它现在有效:))

D3DXMATRIXA16 matWorldViewProj = matWorld * matView * matProj;