terrain:地形渲染 terrain render



  =unnamed1>地形渲染是个很有用窍门技巧=unnamed1>经常用来渲染显示世外场景和地貌形态在DX SDK里有不少terrain render运用比如公告牌例子和实时影子渲染例子里都用到了地形渲染

  =unnamed1> 其实地形渲染就是以个数学生成地表高度值使得地面呈现出高低不平样子使用区别高度生成就可能出现区别地貌比如生成高山样子或者起伏丘陵样子 

   这里我把个terrain render举例完整分离出来

   =unnamed1>下面是地形渲染关键个内联作用是根据x,z坐标值来生成y值即地表高度值使用内联是为了运行取得更高效率
=unnamed1>
inline FLOAT HeightField( FLOAT x, FLOAT y )
{
9*(cosf(x/20+0.2f)*cosf(y/15-0.2f)+1.0f);
}

你可以用想象力自己改写这个 :)可以生成千奇百怪地形

   这是生成地表过程这里用个扁平mesh来做地表然后按定格式取出它高度值用我们高度生成来改写它

( FAILED( m_pTerrain->Create( m_pd3dDevice, _T(\"SeaFloor.x\") ) ) )
D3DAPPERR_MEDIANOTFOUND;

// Add some \"hilliness\" to the terrain
LPDIRECT3DVERTEXBUFFER8 pVB;
( SUCCEEDED( m_pTerrain->GetSysMemMesh->GetVertexBuffer( &pVB ) ) )
{
struct VERTEX { FLOAT x,y,z,tu,tv; };
VERTEX* pVertices;
DWORD dwNumVertices = m_pTerrain->GetSysMemMesh->GetNumVertices;

pVB->Lock( 0, 0, (BYTE**)&pVertices, 0 );

for( DWORD i=0; i<dwNumVertices; i )
pVertices[i].y = HeightField( pVertices[i].x, pVertices[i].z );

pVB->Unlock;
pVB->Release;
}

\" width=548 border=0>


Tags:  maxwellrender render terrain.mpq terrain

延伸阅读

最新评论

发表评论