⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lodterrain.cpp

📁 里内面有两个关于地形的模拟的范例,仔细看一下会收获不小啊
💻 CPP
📖 第 1 页 / 共 3 页
字号:
			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 + -