初始化地景列表并建模
在法线向量和材质定义完毕后就可以进行最后的场景建模了。这里通过glNewList()和glEndList()定义一个新的显示列表的开始与结束,并再其中枚举每一个矩形网格单元,通过将网格单元左上角顶点与右下角顶点的连接而将一个矩形网格单元划分为两个小的三角形网格,由指定了GL_TRIANGLE_STRIP 参数的glBegin()和glEnd()对其进行定义。期间需要指定当前网格的各顶点坐标与法向向量:
glNewList(Terrain, GL_COMPILE); // 开始一个新的显示列表 for (int i = 0; i < m_nDemY - 1; i++) { // 绘制三角网格 for(int j = 0; j < m_nDemX - 1; j++) {// 开始定义三角带 glBegin(GL_TRIANGLE_STRIP); glNormal3d(m_pNormals[(i * m_nDemX + j) * 3 + 0], m_pNormals[(i * m_nDemX + j) * 3 + 1], m_pNormals[(i * m_nDemX + j) * 3 + 2]); // 设置当前法向向量 glVertex3d(m_pDemX[i * m_nDemX + j], m_pDemY[i * m_nDemX + j], m_pDemH[i * m_nDemX + j]); // 定义顶点坐标 glNormal3d(m_pNormals[((i + 1) * m_nDemX + j) * 3 + 0], m_pNormals[((i + 1) * m_nDemX + j) * 3 + 1], m_pNormals[((i + 1) * m_nDemX + j) * 3 + 2]); glVertex3d(m_pDemX[(i + 1) * m_nDemX + j], m_pDemY[(i + 1) * m_nDemX + j], m_pDemH[(i + 1) * m_nDemX + j]); glNormal3d(m_pNormals[(i * m_nDemX + j + 1) * 3 + 0], m_pNormals[(i * m_nDemX + j + 1) * 3 + 1], m_pNormals[(i * m_nDemX + j + 1) * 3 + 2]); glVertex3d(m_pDemX[i * m_nDemX + j + 1], m_pDemY[i * m_nDemX + j + 1], m_pDemH[i * m_nDemX + j + 1]); glNormal3d(m_pNormals[((i + 1) * m_nDemX + j + 1) * 3 + 0], m_pNormals[((i + 1) * m_nDemX + j + 1) * 3 + 1], m_pNormals[((i + 1) * m_nDemX + j + 1) * 3 + 2]); glVertex3d(m_pDemX[(i + 1) * m_nDemX + j + 1], m_pDemY[(i + 1) * m_nDemX + j + 1], m_pDemH[(i + 1) * m_nDemX + j + 1]); glEnd(); // 停止定义三角带 } } glEndList(); // 结束显示列表 |
这里之所以要定义显示列表是因为经过这样的处理后OpenGL将把此由数量众多的节点组成的网格地景模型作为一个整体进行处理。也就是说,当需要重绘图形时,OpenGL将整体绘制而不是象CDC绘图一样去一个顶点一个顶点的绘制,显然这样的处理将极大提高图形的显示处理速度。
在默认状态下OpenGL将以面去建模(如上图所示),如果需要查看不同的建模方式,如以点建模、以线建模和以面建模,可分别以GL_POINT、GL_LINE或GL_FILL调用glPolygonMode()并在之后重绘场景即可(下图分别为以线建模和以点建模的场景):
// 以点建模 glPolygonMode(GL_BACK, GL_POINT); // 以线建模 glPolygonMode(GL_BACK, GL_LINE); // 以面建模 glPolygonMode(GL_BACK, GL_FILL); |
小结
本文主要介绍了对DEM数字高程模型数据的场景绘制方法。读者需要掌握的技术主要有:对法向量的计算、显示列表的创建与使用、材质的定义以及场景建模方式等。本文所述程序在Windows 2000 Professional + SP4下由Microsoft Visual C++ 6.0编译通过。 
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
2/2 首页 上一页 1 2 |