首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络游戏 >

SetVertexDeclaration()和SetFVF(),该如何处理

2012-02-06 
SetVertexDeclaration()和SetFVF()这两个函数效果应该是一样的吧,我最近修改了一段代码,源代码是用的SetVe

SetVertexDeclaration()和SetFVF()
这两个函数效果应该是一样的吧,我最近修改了一段代码,源代码是用的SetVertexDeclaration(),放到我这就是不过:
void BSPTree::Render()
{
SetupMatrices();
pd3dDevice->SetRenderState(D3DRS_LIGHTING, FALSE);
pd3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
  // pd3dDevice->SetRenderState(D3DRS_ZENABLE, TRUE);
for(int i = 0; i < m_facesNum; i++)
  {
  if(m_faces[i].type != 1) continue;
  BSPFace *pFace = &m_faces[i];

// Set texture image.
  pd3dDevice->SetTexture(0, Textures[pFace->texID]);
  pd3dDevice->SetTexture(1, LightMaps[pFace->lightmapID]);

  // Set up data stream.
  pd3dDevice->SetVertexDeclaration(VertexDeclaration);
  pd3dDevice->SetStreamSource(0, VertexBuffer, 0, sizeof(BSPVertex));

  // Draw.
  pd3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN, pFace->startVertexIndex,
  pFace->totalVertices / 2);
  }
}
走到pd3dDevice->DrawPrimitive那就断掉。。。
最后我改成SetFvF(),比着顶点结构体写造了一个灵活顶点格式宏定义:
struct BSPVertex
{
  Point3D vertex;
  TexCoord texCoord;
  TexCoord lightmapCoord;
  Point3D normal;
  unsigned char color[4];
};
#define D3DFVF_BSPVERTEX (D3DFVF_XYZ|D3DFVF_TEX0|D3DFVF_TEX1|D3DFVF_NORMAL|D3DFVF_LASTBETA_D3DCOLOR)

但是纹理坐标又不对了,我改怎么办。。为什么在我那用SetVertexDeclaration()不行?前面的创建都照搬过来的。

[解决办法]
效果不一定一样。
比如,SetVertexDeclaration可以设定纹理坐标是2个浮点数或者3个浮点数或者4个浮点数,也可以设定法线是3个浮点数或者4个浮点数或者一个4字节整数,非常灵活,此外还有很多别的特性,都是FVF做不到的,所以两者不一定能直接转换。
[解决办法]
在创建设备的时候要使用 硬件处理方式,软件会出现一些问题。

热点排行