dedecms织梦内容管理系统    
首页 | java | C/C++ | PHP | 操作系统 | ajax | 脚本编程 | 安全技术 | 本站下载页 | flex | CRM | 专题 | QQ群 | 测试中心 | 会员中心 | 积分规则
  当前位置:主页>C/C++>文章内容
基于OpenGL的三维曲面数据场动态显示
来源: 计算机与信息技术 作者: 白婷 赵军 朱双华等
  摘 要 在大数据量条件下,实时动态显示三维曲面较困难,其关键在于提高三维图形数据处理和图形绘制速度。通过对基于图形工业标准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);

共2页。 1 :

上一篇:在VisualStudio中使用Windows桌面搜索   下一篇:VC++开发的应用技巧三则放送
[收藏] [推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
用户名: 新注册) 密码: 匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论
  热点文章
·C语言学习
·C语言指针
·C语言数组排序小结
·c语言 最简单的推箱子游戏
·c语言 全国计算机编程大赛复赛试
·c语言 全国计算机编程大赛复赛试
·c++ 数组与指针
·C++中的内存管理(new、delete、
·如何用C语言开发DSP嵌入式系统
·如何用C语言开发DSP嵌入式系统
·Linux下C语言编程
·学习arm的话先看哪本书?
  相关文章
·在VisualStudio中使用Windows桌
·VC++开发的应用技巧三则放送
·用VisualStudio2005生成浏览器帮
·OpenGL编程轻松入门之动画制作
·最常见的20种VC++编译错误信息集
·OpenGL编程轻松入门之菜单管理
·Visual C++编译器常用选项设置
·VC++实现非窗口类中使用定时器的
·在Delphi编程中使用C语言代码
·用Visual C++设计“精灵”窗体
·转:从VC++到GCC移植:谈两者语
·VC++实现工具栏上添加平面组合框
  相关信息
copy right @ 百家拳软件项目研究室 2007 辽ICP备07011763