在我的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;
我在屏幕上呈现了静态三角形。
我的代码/技术可能出现什么错误?
( profile:vs_3_0使用D3DXCompileShaderFromFile )
答案 0 :(得分:2)
在编辑pixelhader时,您会覆盖变量constantTable
。因此,矩阵仅在像素着色器中设置,而不在顶点着色器中设置。如果您不需要将信息传递给pixelshader,您可以声明一个额外的变量constantTablePix
或将参数设置为NULL
。
矩阵的正确顺序是。 (我从来没有得到正确的订单,但它现在有效:))
D3DXMATRIXA16 matWorldViewProj = matWorld * matView * matProj;