基于OpenGL的三维曲面数据场动态显示

2009-9-30 作者: 白婷 赵军 朱双华等 来源: 计算机与信息技术

关键字: OpenGL 三维曲面 动态显示 

在大数据量条件下,实时动态显示三维曲面较困难,其关键在于提高三维图形数据处理和图形绘制速度。通过对基于图形工业标准OpenGL实现三维曲面动态显示的原理和方法的讨论,提出采用OpenGL的双缓存、显示列表技术,大幅度提高了图形数据处理和刷新速度,保证了每帧数据图形绘制的连续性和完整性,成功实现了三维曲面数据场实时动态显示。

  引言

  在某三维数据场中,数据随时间的变化而发生变化,为直观观察数据随时间变化的态势,需对数据场的变化实时动态显示。利用网格曲面显示三维数据场是一种直观的方法,但需经过数据插值、投影、曲面拼接、消隐等处理后方可绘制图形,计算量较大。在数据量较大的情况下,实时动态显示三维曲面图形较困难,其关键在于提高每帧图形处理和绘制刷新速度,以保证每帧三维曲面显示时的连贯性和完整性。

  OpenGL是性能卓越的图形处理工具,采用OpenGL双缓存和绘图操作予编译技术,较好解决了三维图形数据处理和绘图刷新速度问题。利用Visual C++调用OpenGL的三维图形编程接口成功实现了大数据量的三维曲面图形的实时动态显示。

  一、基于OpenGL的三维曲面动态显示原理

  1、基于OpenGL三维曲面图形显示原理

  OpenGL是独立于操作系统的开放式三维图形软件接口。其主要功能是将三维曲面通过顶点序列或像素点进行描述,并进行相应的透视、光照、纹理操作,最终转换成帧缓存中的图像数据,利用该图像数据进行三维曲面图形的着色。三维曲面图形显示归纳为以下几个步骤:

  (1)在三维场景中建立曲面绘制的模型。选用插值方法、参数曲面函数,计算曲面控制点,进行曲面重构;

  (2)设置视点和透视方式;

  (3)进行消隐、光照、纹理、明暗处理;

  (4)绘制场景,输出到屏幕窗口。


图1 三维曲面图形显示基本流程

  2、利用双缓存实现动态显示原理

  三维曲面动态显示需要连续地绘制三维曲面并显示场景,用不同的曲面数据刷新屏幕视窗。

  在OpenGL中利用双缓存技术,分配两个帧缓存区,在连续显示三维曲面时,一个帧缓冲区中的数据执行绘制曲面命令的同时,另一个帧缓存区中的数据进行图形显示。当前可见视频缓存称为前台视频缓存,不可见的正在绘图的视频缓存称为后台视频缓存。当后台视频缓存中的数据要求显示时,OpenGL就将它拷贝至前台视频缓存,显示硬件不断地读可见视频缓存中的内容,并把结果显示在屏幕上。

  应用双缓存,每一帧三维曲面只在绘制完成之后才显示出来,所以观察者可以看到每一帧完整三维曲面,而不是曲面的绘制过程。

  使用双缓存实现三维曲面动态显示的步骤如下:

  (1)设置OpenGL窗口显示属性为双缓存机制:auxInitDisplayMode(AUX_DOUBLE|AUX_RGBA);

  (2)利用OpenGL基本绘图命令绘制三维曲面;

  (3)一帧曲面绘图结束后缓存拷贝,切换缓存:auxSwapBuffers();

  SwapBuffers(wglGetCurrentDC());

  3、利用显示列表提高程序运行效率

  显示列表是一组预先存储起来留待以后调用的函数语句。调用显示列表时就按次序执行其中的函数。显示列表将反复执行的绘图操作以编译好的命令方式进行存储,设计成命令的高速缓存,而不是动态的数据库缓存,所以可以优化程序运行性能。

  实现和调用显示列表的方法:

  (1)创建列表:

  void glNewList(Gluint list,Glenm mode);

  void glBegin(Glenum mode);

  void glEnd(void);

  void glEndList();

  (2)调用列表:

  void glCallList(Gluint list);




责任编辑:熊东旭