以文本方式查看主题 - 计算机科学论坛 (http://bbs.xml.org.cn/index.asp) -- 『 C/C++编程思想 』 (http://bbs.xml.org.cn/list.asp?boardid=61) ---- 基于OpenGL的三维曲面数据场动态显示 (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=61178) |
-- 作者:卷积内核 -- 发布时间:4/11/2008 10:11:00 AM -- 基于OpenGL的三维曲面动态显示实现 在使用Visual C++的MFC AppWizard建立应用程序框架后,生成了多个类,与OpenGL编程相关的类是视图类,主要的显示任务都在其中完成。 1、基于OpenGL绘图的基本设置 1.1 设置必要的编译链接环境 OpenGL的图形编程接口包括的主要函数和库函数被封装在动态链接库中,因此在项目中要添加 OpenGL32.dll、glu32.dll和glaux.dll三个库。同时在应用程序的视类头文件中加入OpenGL头文件说明: #include "gl\gl.h" #include "gl\glu.h" #include "gl\glaux.h" 1.2 设置像素格式 该部分设置绘图所需的像素格式,Windows下采用PIXELFORMATDESCRIPTOR结构设置像素格式,该结构包含26个属性信息,包含了颜色位数、颜色模式、缓存的位数和操作方式,以及是否采用双缓存机制等。 1.3 创建着色描述表 OpenGL应用程序的设备描述表(DC)称为着色描述表,由它通知Windows在窗口中绘制图形。应用程序必须在绘图之前调用专用函数wglCreateContext()创建自己的着色描述表,调用wglMakeCurrent()使其当前化,退出OpenGL时使着色表非当前化。 1.4 创建三维曲面的观察场景 OpenGL一般用函数glFrustrum()和glViewport()实现投影变换和视口变换。glFrustrum()定义了一个容纳绘制对象的最大空间区域,即视景体,位于视景体以外的部分都会被剪切掉;glViewport()则定义了一个绘制场景的矩形区域,即视口,用来把场景中的点映射到绘图区。 glFrustrum(-1.0,1.0,-2.0,2.0,0.0,7.0); //视景体上、下、左、右、前、后的坐标分别为-1.0,1.0,-2.0,2.0,0.0,7.0; glViewport(0,0,200,300); //视口区上、下、左、右坐标分别为0,0,200,300; 1.5 视类中OnDraw()成员函数的设置 在Windows的VC++编程中,所有窗口中的图形绘制代码都在视类的OnDraw成员函数中实现,采用OpenGL绘制三维曲面之前需要进行必要的环境设置。 glClearColor(1.0f,1.0f,1.0f,1.0f);//设置背景颜色为白色 glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);//清除颜色缓存和深度缓存 glColor3f(1.0f,1.0f,1.0f);//设置绘图颜色为红色 2、创建绘制三维曲面的显示列表 在显示列表中定义用户绘制三维曲面图形所需数据以及数据之间显示连接方式。文中实例中显示列表包括三维曲面图形的数据点的显示列表;坐标轴的显示列表;显示坐标数据的显示列表。显示列表采用线段连接的方式。
|
W 3 C h i n a ( since 2003 ) 旗 下 站 点 苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》 |
62.500ms |