|
|
//---------------------------------------------
//渲染一个节点
//---------------------------------------------
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;
}
|
|