第12讲 地形构建.docVIP

  • 2
  • 0
  • 约 14页
  • 2017-01-03 发布于贵州
  • 举报
第12讲 简易地形构建 原理详见ppt 1、TerrainSample.h #pragma once #include d3d9.h #include d3dx9.h struct CUSTOMVERTEX3 { D3DXVECTOR3 pos; D3DXVECTOR3 nor; D3DXVECTOR2 tex; }; #define D3DFVF_CUSTOMVERTEX3 (D3DFVF_XYZ | D3DFVF_NORMAL|D3DFVF_TEX1) class CTerrainSample { public: CTerrainSample(LPDIRECT3DDEVICE9 device); ~CTerrainSample(void); bool Init(int, int, float); bool LoadTerrain(wchar_t *pTextureFile); void Render(); //根据顶点的x值和z值,计算出y值 float getHeight(float x, float z)const; private: //顶点缓冲和顶点索引缓冲/ int m_vertexCount; int m_indexCount; LPDIRECT3DDEVICE9 m_pd3dDevice; LPDIRECT3DTEXTURE9 m_pTexture; LPDIRECT3DVERTEXBUFFER9 m_pVB; LPDIRECT3DINDEXBUFFER9 m_pIB; }; 2、TerrainSample.cpp #include TerrainSample.h CTerrainSample::CTerrainSample(LPDIRECT3DDEVICE9 device) { m_pVB = NULL; m_pIB = NULL; m_pd3dDevice=device; } CTerrainSample::~CTerrainSample(void) { } float CTerrainSample::getHeight(float x, float z) const { return 0;// 4*sin(x);//0.3f*( z*sinf(0.1f*z) + x*cosf(0.1f*x) ); } bool CTerrainSample::LoadTerrain(wchar_t *pTextureFile) { // 加载天空纹理 if (FAILED(D3DXCreateTextureFromFile(m_pd3dDevice, pTextureFile, m_pTexture))) return FALSE; return TRUE; } bool CTerrainSample::Init( int m, int n, float dx) { CUSTOMVERTEX3 * vertices; WORD * indices; m_vertexCount = m*n;//计算得到顶点和索引顶点数目 m_indexCount = (m-1)*(n-1)*2*3;//首先得到三角形的数目,然后乘以就是顶点索引数目 //创顶点缓冲区 if( FAILED( m_pd3dDevice-CreateVertexBuffer( m_vertexCount*sizeof(CUSTOMVERTEX3), 0, D3DFVF_CUSTOMVERTEX3, D3DPOOL_DEFAULT, m_pVB, NULL ) ) ) { return false; } //填充顶点缓冲区 if( FAILED( m_pVB-Lock( 0, 0, (void**)vertices, 0 ) ) ) return false; float halfWidth = (n-1)*dx*0.5f; float halfDepth = (m-1)*dx*0.5f; for(int i = 0; i m; ++i) { float z = halfDepth - i*dx; for(int j = 0; j n; ++j) {

文档评论(0)

1亿VIP精品文档

相关文档