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;

我得到了屏幕上呈现的静态三角形。

在此处输入图像描述

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

(配置文件:vs_3_0 使用 D3DXCompileShaderFromFile )

4

1 回答 1

2

在编译像素着色器时,您会覆盖您的变量constantTable。所以矩阵只设置在像素着色器中而不是顶点着色器中。如果您不需要将信息传递给像素着色器,则可以声明一个附加变量constantTablePix或将参数设置为。NULL

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

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