|
|
//---------------------------------------------
//渲染一个节点
//---------------------------------------------
void CTerrain::RenderNode(float x,float z,int NodeSize)
{
int i;
int iX = x;
int iZ = z;
CUSTOMVERTEX vertex[10];
int CurrentNodeSize = NodeSize/2;
i=0;
GenerateVertex(x,z,vertex);
i++;
GenerateVertex(x+CurrentNodeSize,z+CurrentNodeSize,vertex);
i++;
if((iX+NodeSize)<= MapLength &&
(CheckifSplit(iX+NodeSize,iZ)==TRUE)) //检查临近节点有没有分割,防止产生裂缝
//每条边的中点都必须检查
{
GenerateVertex(x+CurrentNodeSize,z,vertex);
i++;
}
GenerateVertex(x+CurrentNodeSize,z-CurrentNodeSize,vertex);
i++;
if((iZ-NodeSize)>=0 &&
(CheckifSplit(iX,iZ-NodeSize)==TRUE)) //检查临近节点有没有分割,防止产生裂缝
{
GenerateVertex(x,z-CurrentNodeSize,vertex);
i++;
}
GenerateVertex(x-CurrentNodeSize,z-CurrentNodeSize,vertex);
i++;
if((iX-NodeSize)>=0 &&
(CheckifSplit(iX-NodeSize,iZ)==TRUE))//检查临近节点有没有分割,防止产生裂缝
{
GenerateVertex(x-CurrentNodeSize,z,vertex);
i++;
}
GenerateVertex(x-CurrentNodeSize,z+CurrentNodeSize,vertex);
i++;
if((iZ+NodeSize)<=MapLength &&
(CheckifSplit(iX,iZ+NodeSize)==TRUE))//检查临近节点有没有分割,防止产生裂缝
{
GenerateVertex(x,z+CurrentNodeSize,vertex);
i++;
}
GenerateVertex(x+CurrentNodeSize,z+CurrentNodeSize,vertex);
i++;
DrawOneNode(vertex,i);
return ;
}
//---------------------------------------------
//渲染一个节点
//---------------------------------------------
void CTerrain::RenderNode(float x,float z,int NodeSize)
{
int i;
int iX = x;
int iZ = z;
CUSTOMVERTEX vertex[10];
BOOL DrawOneNode(CUSTOMVERTEX *SrcVertex,int VertexNum) //根据顶点数据渲染出一个正方
{
pDevice->DrawPrimitiveUP(D3DPT_TRIANGLEFAN,VertexNum-2,SrcVertex,sizeof(CUSTOMVERTEX));
count +=(VertexNum-2);
return TRUE;
}
上面是部分代码,是扇型渲染得
如何改为HLSL渲染呢?
好像如下代码,我渲染出来是黑屏!!!!
mTerrainFX->SetMatrix(mhWVP, &matview);
mTerrainFX->SetTechnique(mhTech);
UINT numPasses = 0;
mTerrainFX->Begin(&numPasses, D3DXFX_DONOTSAVESHADERSTATE);
mTerrainFX->BeginPass(0);
/*d3d::gd3dDevice->DrawIndexedPrimitive(D3DPT_TRIANGLELIST, 0, 0,
mNumVertices, 0, mNumTriangles);*/
Render(MapLength/2,MapLength/2,MapLength); //渲染整个地形
mTerrainFX->EndPass();
mTerrainFX->End();
|
|