#include "modelname.h",绘制模型时调用:glCallList(model)。
3.1.2 OpenGL 建模
OpenGL提供了丰富的基本图元绘制命令,可以采用多个由三角形或四边形拼接而成的曲面来近似模拟地形表面,但必须保证多边形的方向是一致的。物体的法向量决定了物体在空间中的方向,特别是相对于光源的方向,通过计算得出法向量,来确保多边形的方向一致。选取相邻3 点V 1 ,V 2 和V 3 ,求取向量v2 - v1 和v3 - v1 ,则差积v2 - v1 ×v3 - v1 即是垂直于该三角形的法向量。也可以使用Bezier 曲面或NURBS 曲面来创建所需要的曲面。绘制Bez2ier 曲面的主要代码为:
glEnable(GL_MAP2_VERTEX_3) ;
glMap2f(GL_MAP2_VERTEX_3 ,0 ,1 ,3 ,5 ,0 ,l ,l ,5 ,5 , &ctrlpoint s[0] [0] [0]) ;
glMapGrid2f(1010 , 010 , 110 , l010 , 010 ,110) ;
glEvalMesh2(GL-LINE. 0 , 101010 ,1010) 。
3.2 真实感的地形绘制
真实感图形的绘制技术主要包括消隐处理、纹理影射和光照设置等。
3.2.1 消隐处理
当在场景中绘制三维地形时,各个顶点绘制顺序不同,地形的某些部分可能会被其他的部分所遮挡。当观察场景时,在视线范围内看不到的部分应该是不可见的,无论以什么样的角度观察场景,都应该保持这种遮挡关系。为了绘制出的地形具有三维立体感,应该隐藏不可见的线条,这个问题称为图形的消隐处理。方法为调用函数glClearDepth ( Glclampfdept h) 设置缓冲区的初值,然后调用函数glClear (GL_DEPTH_BUFFER_BIT) 用设定的深度值dept h 填充深度缓冲区,最后调用函数glEnable ( GL_DEPTH_ TEST) 激活深度缓存,即实现消隐功能。
3.2.2 纹理影射
通过点、线、面等几何图元创建的物体表面往往过于光滑和单调,致使真实感不够强。应用OpenGL 提供的纹理映射技术可把从真实世界中拍摄到的某种物体的表面细节,采用贴图的方式贴到三维场景中同种物体的表面,从而使渲染后得到的图像中物体与真实世界中的物体惟妙惟肖。
3.2.3 光照设置
三维场景中的物体在没有光照的条件下看起来没有三维立体的感觉。物体表面所呈现的颜色是由表面向视线方向辐射的光能决定的,照射到物体表面的光称为入射光,而从物体表面反射回来的光称为反射光。所看到的物体表面的颜色就是由物体表面的材质特性即表面向不同方向上反射的红、绿、蓝各颜色分量的百分比决定的。对地形模型进行光照设置的具体步
骤为:
(1) 把四边形地形模型分为许多个小三边形,然后按照要求求出垂直于各个小三边形的法向量;
(2) 调用函数glLight 3 () 创建光源,设置好光源之后,必须再调用函数glEnable ( GL_LIGHTIN G) 来启动光照效果,同时调用函数glEnable (光源号) 打开某个光源;
(3) 调用函数glLightModel () 指定光照模型。
3.3 视景变换
创建完模型后,只有放在三维空间中的适当位置,并选择适当的视点及观察方向才能更有利于用户的观看。为了观察场景中的模型,需要进行视景转换,包括视点转换、模型转换、投影转换和视口转换。主要有以下几个步骤:
(1)执行视点变换,在三维场景中定位观察物体的视点位置和方向。调用函数
(2)gluLookAt ( eyex , eyey ,eyez , centerx , centery ,centerz ,up x ,upy ,upz) 来指定视点变化。其中参数eyex 、eyey、eyez 指定观察点, 参数centerx 、centery、centerz 指定观测场景的参考点,这两点就明确了视线的方向。参数up x 、upy、upz 指定视图体自下而上的方向,通常将该方向设置为指向Y轴的正方向。
(3) 利用模型变化命令glTranslate( x ,y ,z) 和Rotate(angle , x ,y ,z) 进行平移和旋转两种操作,确定物体在场景中的位置和方向。
(4) 把三维模型投影到二维屏幕上,即投影转换,一是确定物体投影到屏幕上的方式,是透视投影还是正投影;二是确定场景中有哪些物体要显示在最终的屏幕区域内。利用函数gluPerspective( )和glOrtho( ) 定义投影方式:透视投影和正投影。透视投影同现实生活中人们看到的景物效果一样,距离视点越远的物体看起来越小,距离视点越近的物体看起来越大,符合人们的视觉习惯。透视投影的应用比较广泛,通常用到视景仿真和模拟真实场景的应用程序中。正投影中无论视点到视景体的距离多远,经过投影后物体的大小总是不变的,因此在三维地形可视化中采用透视投影。
(5) 利用glViewport( ) 来确定视口的大小,规定屏幕上显示场景的范围及尺寸,即视口转换。
3.4 人机交互的实现
交互式不仅允许用户指定屏幕上的物体,而且还可以通过鼠标或键盘移动、选择或其他方式操作这些物体,以实现不同角度、不同方位、不同距离的观察,方便用户变化角度进行观察。能够交互式地从各个不同的角度形象直观地展示三维地形,进行三维地形可视化,具有很大的实用价值。此事例中用键盘响应交互事件,定义Page up , Page down 抬高、降低视点,↑前移、↓后移视点, ←左移视点、→右移视点。
4 结论
本文利用建模技术建了三维地形模型,在场景中使用光照、纹理映射技术使之具有了较强的真实感,通过键盘进行人机交互,最终实现了三维地形的可视化。该实例证明,三维地形可视化能够交互式地从各个不同的角度更形象更直观地展示三维地形,通过地形表面的可视化,可以了解研究区域的三维信息特征,为进一步研究区域地形演变、泥沙冲淤提供实时帮助,具有很大的实用价值。
参考文献
[1] 拿颖,薛海斌,朱伯立,等. OpenGL 技术应用实例精粹 北京:国防工业出版社,2001.
[2] 和平鸽工作室. OpenGL 高级编程与可视化系统开发 北京:中国水利水电出版社,2002.
[3] 张俊霞. 三维地形可视化及其实时显示方法概述[J].北京测绘,2001.
[4] 许家帅. 三维地形表面的可视化实现[J].水道港口,2003.
[5] 辛海霞,吕秋灵.基于0penGL 的三维地形可视化技术与实现[J].水道港口. 2004.
[6] 韩样. 基于OpenGL 的三维地形可视化方法研究[J ].车辆与动力技术,2003.
[7] 尚游,陈岩涛.OpenGL 图形程序设计指南[M].北京:中国水利水电出版社, 2001.
2/2 首页 上一页 1 2 |