关于GUI设计的Directx灵活顶点格式

  在用Directx编写GUI类时,考虑到一个问题:如何让界面视角不发生变化?也就是说当你游戏内的非UI部分随着视角坐标的转换而转换时,让UI界面始终朝向你?

 

  一个可行的解决方法是:不让UI界面在D3D中间进行矩阵转换。这个方法可以通过设置灵活顶点格式(FVF)为D3DFVF_XYZRHW来实现,下面是关于顶点格式的几个说明(可以查看Directx的SDK,此部分内容参考过网友提供的文章,将在下一篇中转载该网友文章):

  1. D3DFVF_XYZ:顶点的三维坐标(分别是XYZ),它说明顶点有位置,将由Direct3D对其进行矩阵变换;
  2. D3DFVF_XYZRHW:RHW,与D3DFVF_XYZ不同的是:它说明顶点有位置且已经过矩阵变换,不再由Direct3D对它进行矩阵变换;
  3. D3DFVF_DIFFUSE:表示顶点格式中有漫反射颜色;
  4. D3DFVF_NORMAL:表示顶点有法线向量;
  5. D3DFVF_TEXc:表示顶点有纹理坐标,c可以是1至8,表示有多少套纹理坐标;

 

  在上面的几个属性里,D3DFVF_XYZRHW和D3DFVF_XYZ、D3DFVF_NORMAL不能同时存在,因为后面的两个标志和前面这个是有冲突的,比如以下的设置是可以的:

  1. D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;

  2. D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;

 

  我们在写GUI类时,通常是用D3DFVF_XYZRHW | D3DFVF_DIFFUSE | D3DFVF_TEX1;而在绘制游戏场景之类的图形时,一般用D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1。

你可能感兴趣的:(游戏编程)