📄 lodterrain.cpp
字号:
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(x+iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
//渲染三角扇形
RenderTriFan(vertices,i);
//继续分割其余3个节点
RenderNode(x-iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x+iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==true && bTopLeft==true && bBottomRight==true && bBottomLeft==false){
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-iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
//渲染三角扇形
RenderTriFan(vertices,i);
//继续分割其余3个节点
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x+iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x+iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
//2个节点分割的情形
if(bTopRight==true && bTopLeft==false && bBottomRight==true && bBottomLeft==false){
//渲染第1个三角扇形
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);
//渲染第2个三角扇形
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);
//继续分割其余2个节点
RenderNode(x+iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x+iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==true && bTopLeft==false && bBottomRight==false && bBottomLeft==true){
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(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);
//
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(x+iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x+iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x-iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==true && bTopLeft==true && bBottomRight==false && bBottomLeft==false){
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(x+iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(fRightX,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//渲染第2个三角扇形
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);
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==false && bBottomRight==true && 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+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);
//渲染第2个三角扇形
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);
RenderNode(x-iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==true && 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,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);
//渲染第2个三角扇形
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-iChildNodeOffset,z,vertices[i]);
i++;
GenerateVertex(x,z,vertices[i]);
i++;
RenderTriFan(vertices,i);
//
RenderNode(x+iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
}
if(bTopRight==false && bTopLeft==true && 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,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);
//渲染第2个三角扇形
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);
//
RenderNode(x-iChildNodeOffset,z+iChildNodeOffset,iChildNodeLength);
RenderNode(x-iChildNodeOffset,z-iChildNodeOffset,iChildNodeLength);
}
//1个节点继续分割的情形
if(bTopRight==true && bTopLeft==false && bBottomRight==false && bBottomLeft==false){
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++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -