📄 lodterrain.cpp
字号:
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX+iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x+iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fBottomZ,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fLeftX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
GenerateVertex(x,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fLeftX,z,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fLeftX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX-iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(x,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x+iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==true && bBottomRight==false && bBottomLeft==false){
i=0;
GenerateVertex(x+iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fRightX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x+iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fRightX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX+iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fBottomZ,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fLeftX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,z,vertices[i]);
i++;
GenerateVertex(x-iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==false && bBottomRight==true && bBottomLeft==false){
i=0;
GenerateVertex(x+iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fRightX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,z,vertices[i]);
i++;
GenerateVertex(x+iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fBottomZ,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fLeftX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fLeftX,z,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fLeftX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX-iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(x,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x+iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==false && bBottomRight==false && bBottomLeft==true){
i=0;
GenerateVertex(x+iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fRightX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x+iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fRightX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX+iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
GenerateVertex(x,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x-iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(fLeftX,z,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fLeftX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX-iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(x,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x-iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==false && bBottomRight==false && bBottomLeft==false){
i=0;
GenerateVertex(x+iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fRightX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(fRightX,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x+iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
if((x+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX+iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fRightX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fRightX,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX+iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x+iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z-iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(x,fBottomZ,vertices[i]);
i++;
if((z-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iChildNodeOffset,iZ-iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fBottomZ,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fBottomZ,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ-iChildNodeOffset)==true){
GenerateVertex(fLeftX,z-iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
i=0;
GenerateVertex(x-iChildNodeOffset,z+iChildNodeOffset,vertices[i]);
i++;
GenerateVertex(x,fTopZ,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
GenerateVertex(fLeftX,z,vertices[i]);
i++;
if((x-iOutChildNodeOffset)>=0 && GetQuadMatData(iX-iOutChildNodeOffset,iZ+iChildNodeOffset)==true){
GenerateVertex(fLeftX,z+iChildNodeOffset,vertices[i]);
i++;
}
GenerateVertex(fLeftX,fTopZ,vertices[i]);
i++;
if((z+iOutChildNodeOffset)<=m_iTerrainSize && GetQuadMatData(iX-iChildNodeOffset,iZ+iOutChildNodeOffset)==true){
GenerateVertex(x-iChildNodeOffset,fTopZ,vertices[i]);
i++;
}
GenerateVertex(x,fTopZ,vertices[i]);
i++;
RenderTriFan(vertices,i);
}
}
}
void CLODTerrain::GenerateVertex(float x,float z,CUSTOMVERTEX& vertex){
int iX=(int)x;
int iZ=(int)z;
if(!m_bUseHeightFile)
vertex=CUSTOMVERTEX(x,GenerateHeightData(x,z)*m_fHeightScale,z,(x/m_iTerrainSize)*m_iTexMapRepeatNum,(z/m_iTerrainSize)*m_iTexMapRepeatNum);
else
vertex=CUSTOMVERTEX(x,m_pucHeightData[iZ*m_iTerrainSize+iX]*m_fHeightScale,z,(x/m_iTerrainSize)*m_iTexMapRepeatNum,(z/m_iTerrainSize)*m_iTexMapRepeatNum);
}
void CLODTerrain::RenderTriFan(CUSTOMVERTEX* vertex,int iVertexCount){
CUSTOMVERTEX* vertices;
m_pVertexBuffer->Lock(0,0,(void**)&vertices,0);
for(int i=0;i<iVertexCount;i++){
vertices[i]=*(vertex+i);
}
m_pVertexBuffer->Unlock();
m_pd3dDevice->SetStreamSource(0,m_pVertexBuffer,0,sizeof(CUSTOMVERTEX));
m_pd3dDevice->DrawPrimitive(D3DPT_TRIANGLEFAN,0,iVertexCount-2);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -