使用DXUT显示网格时的坐标变换问题

Posted on 2008-11-21 23:37 Herbert 阅读(346) 评论(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 则意味着这些顶点表示已经经过这三个变换。

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理