Posted on 2008-11-21 23:37
Herbert 阅读(350)
评论(0) 编辑 收藏 引用 所属分类:
DirectX
今天在做毕业设计的时候,想在场景中添加一个网状的地面。但不知道为什么,无论我怎么移动摄像机,场景中显示的网状地面总是一条线,而另外一个模型则可以随摄像机移动而变换,折腾了半天还是找不出原因。我所用的摄像机是DXUT提供的CFristPersonCamera 和 CModelViewerCamera,在 OnFrameRender里面给设备设置了 WorldMatrix 、ViewMatrix、ProjectionMatrix。然后分别为模型和网格的显示提供了两个不同的渲染效果。为网格提供的fx文件代码如下:
VS_OUTPUT VS_ResetMatrix(VS_INPUT input)
{
VS_OUTPUT output = (VS_OUTPUT) 0;
output.pos = mul( input.pos, g_wvpMatrix);
output.diffuse = g_color;
output.tex = input.tex;
return output;
}
其中 g_wvpMatrix是经过World 、View、Project变换以后得出的矩阵。后来我先后试着把 World变换和 Project变换去掉看结果,发现当我去掉 World变换以后,摄像机的使用就正常了。
另外,如果有自定义的顶点格式,注意使用的FVF中顶点的处理方式是D3DFVF_XYZ 还是 D3DFVF_XYZRHW。如果是D3DFVF_XYZ,则需要自己进行 World、View、Project变换;如果是D3DFVF_XYZRHW 则意味着这些顶点表示已经经过这三个变换。