


全文预览已结束
付费下载
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第18卷第5期武汉科技学院学报Vol.18No.52005年05月JOURNALOFWUHANUNIVERSITYOFSCIENCEANDENGINEERINGMay.2005基于VC和OpenGL的三维图形的开发陈家凤1,2,陈越2(1中南民族大学电子信息工程学院,湖北武汉430074;2华中科技大学光电子工程系,湖北武汉430074)摘要:介绍了利用VC+6.0和OpenGL进行三维图形开发的基本步骤、方法。并以红外成像系统所产生的光斑图像为原始数据,详细介绍了如何利用OpenGL强大的图形、图像及动画处理功能,开发出成像系统焦平面上的光斑图像的三维能量分布图,并绘制出任意方向的截面图。开发过程中利用图像采集卡采集的每个点的行、列和光强(灰度)作为三维图形的x,y,z坐标,采用绘制网格图的形式绘制三维图形。实验结果表明:利用VC+6.0和OpenGL作为开发工具来进行三维图形的开发非常方便,有效。关键词:光斑;VC+6.0;OpenGL;三维图形中图分类号:TP302.4文献标识码:A文章编号:10095160(2005)004903VisualC+6.0是VisualStudio中功能最为强大、代码效率最高的开发工具。VisualC+6.0为程序开发者提供的ClassWizard与AppWizard可使编程工作变得轻松愉快。OpenGL1是处理专用图形硬件的软件接口,可以独立于具体的硬件系统和操作系统,是支持可视化实现的语言。OpenGL由几百个指令或函数组成。对于OpenGL的实现者而言,OpenGL是影响图形硬件操作的指令集合。OpenGL的库函数被封装在Opengl32.dll动态连接库中。OpenGL最主要的工作就是将二维及三维物体描绘至帧缓存。具体地说:OpenGL的功能如下:绘制三维物体、观看物体、指定颜色模式、光照、增强图像效果、管理位图和图像、纹理映射、制作动画和实现交互技术。本文利用OpenGL强大的图形处理功能绘制焦平面上的成像光斑的三维能量分布图及任意方向的截面图。1建立VC与OpenGL的应用接口及OpenGL极小化在利用OpenGL开发工具编制应用程序之前,首先应进行OpenGL的头文件与函数库文件的包含2,即在WorkspaceWindows中单击File文件标签,打开SourceFiles,双击StepinGLView.h以打开此文件。在文件首部添加头文件:#include“glgl.h”#include“glglu.h”然后打开菜单ProjectSettings,在弹出的对话框中选择Link标签,在ObjectLibarayModules栏中增加OpenGL32.lib及glu32.lib两个文件。接下来再极小化OpenGL:第一步:设置像素格式和管理着色描述表(1)设置像素格式。无论进入OpenGL的是何种数据,OpenGL最终都将进行像素操作,即把像素写到帧存上去,因此必须设置像素的属性。每一个OpenGL显示设备都支持特定数目的像素格式。一个指定的像素格式必须通过PIXELFORMATDESCRIPTOR结构得到描述。像素格式的设置是通过成员函数bSetupPixelFormat()来实现的。(2)创建着色描述表。任何一个Windows程序都必须处理设备描述表,它告诉Windows怎样在一个窗口中显示图形信息。同样,OpenGL应用程序也必须应用DC(称为着色描述表(RC)。着色描述表保存了与系统发生联系的重要信息。一个应用程序必须有一个着色描述表。对着色描述表的创建可通过函数Init()来实现。(3)删除着色描述表。最后,当关闭应用程序时,调用视窗类消息函数OnDestroy()来删除着色描述表及绑定上该着色描述表的设备描述表。收稿日期:2005-03-03作者简介:陈家凤(1968),女,讲师,研究方向:图形绘制武汉科技学院学报2005年50(4)设定OpenGL风格。OpenGL有自己的像素格式,只有OpenGL的客户区才能接受OpenGL绘制,因此,一般应有这两个风格设置。通过成员函数PreCreateWindow()来实现。BOOLCGraphicsView:PreCreateWindow(CREATESTRUCT&cs)/TODO:Addyourspecializedcodehereand/orcallthebaseclasscs.style|=WS_CLIPCHILDREN|WS_CLIPSIBLINGS;returnCScrollView:PreCreateWindow(cs);第二步:建立OpenGL视点这部分的作用主要是获得客户区的大小、清除深度缓存、启动深度测试及启动OpenGL模型变换;建立视点、启动透视变换及建立透视体。2三维图形的绘制及着色这里以红外面阵CCD为接收器,以无穷远点光源通过被测系统后,利用三维能量分布图分析其焦面上成像光斑的能量分布情况。三维能量分布图是利用OpenGL开发工具进行三维图形的开发34。主要过程是利用图像采集卡采集的每个点的行、列和光强(灰度)作为三维图形的x,y,z坐标,采用绘制网格图的形式绘制三维图形。绘制网格图的过程是采用绘制四边形片来实现的,它是一系列四边形片连接起来的图形。具体做法是在glBegin(GL_QUAD_STRIP)/glEnd()函数对中,前四个顶点决定了第一个四边形,然后每增加两个顶点便增加一个四边形。当然,四边形片的顶点的顺序也是十分重要的。表1中列出了四边形片中每个四边形的顶点。而实际的顶点标识顺序如图1所示。在绘制三维图形的过程中采用了调用显示列表的方法。在本软件中,由于要从不同的角度观察其能量分布情况即要求三维图能转动,而且还要求绘制其任意方向的截面图,所以,数据量比较大。显示列表是经过编译的,因而执行效率比较高。而且,显示列表可以在任何地方被调用,并按顺序立即执行。同时为了增强图形效果,采用对不同的灰度等级进行着色的办法来实现对三维图形的着色。3三维图形的消隐计算机绘制物体时,必须把三维信息经过某种变换,在二维显示表面上绘制出来。由于投影变换失去深度信息,往往导致图形的二义性。要消除二义性,就必须在绘制时消除实际不可见的线和面,这一过程称为消隐。在本软件中,我们采用了一般消隐法进行消隐。这种方法是首先设置消隐使能,初始化深度缓存,设置消隐比较,然后直接进行绘图即可。具体方法如下:glEnable(GL_DEPTH_TEST);/设置消隐使能glClearDepth(1.0);/设置初始化深度缓存glClear(GL_DEPTH_BUFFER_BIT);/清除深度缓存glDepthFunc(GL_LESS);/确定测试条件glDisable(GL_DEPTH_TEST);/关闭深度测试完成上述设置后,即可开始绘图,消隐能正常显示。4三维图形的动画制作OpenGL是用双缓存技术来实现动画的。在双缓存模式下,位平面被分成前台位平面和后台位平面。只有前台位平面被显示,因为绘制函数所绘制的场景首先被写向后台位平面。在画任何物体之前,必须把帧存设置成正确的组态。当完整的画面在后台视频缓存中画出以后,就调用SwapBuffers()函数,使其成为可见视频缓存。具体实施如下:首先必须在像素格式设置bSetupPixelFormat()函数中的结构体内设置:表1四边形片中的顶点顺序四边形四边形顶点1顶点1,顶点2,顶点3,顶点42顶点3,顶点4,顶点5,顶点63顶点5,顶点6,顶点7,顶点84顶点7,顶点8,顶点9,顶点105顶点9,顶点10,顶点11,顶点12图1定义四边形5期陈家凤,等:基于VC和OpenGL的三维图形的开发51PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|PFD_DOUBLEBUFFER,PFD_TYPE_RGBA,再定义变量并初始化:Glfloatm_rotateX=-60.0f;Glfloatm_rotateY=0.0f;Glfloatm_rotateZ=60.0f;BOOLm_play;变量m_rotateX,m_rotateY,m_rotateZ分别说明三维图形绕x,y,z轴旋转的角度。m_play控制动画的播放,其值通过鼠标双击来控制。在Windows环境下进行三维动画设计时,需要使用定时器。Windows提供的SetTimer()函数为应用程序分配一个定时器。通过该函数的参数可以设置时间间隔,Windows将用这个时间间隔值周期性地向程序发送WM_TIMER消息。当不再使用定时器后,可用KillTimer()函数取消定时器。然后在三维图形绘制函数中写入旋转函数。代码如下:glRotatef(m_rotateX,1.0f,0.0f,0.0f);/沿X轴旋转m_rotateX个角度;glRotatef(m_rotateY,0.0f,1.0f,0.0f);/沿Y轴旋转m_rotateY个角度;glRotatef(m_rotateZ,0.0f,0.0f,1.0f);/沿Z轴旋转m_rotateZ个角度;最后在三维图形绘制函数DrawScene()中加上语句:SwapBuffers(wglGetCurrentDC();来交换前后台缓存。5应用实例利用红外成像光斑测试仪所产生的光斑图像,给出了利用VC+6.0和OpenGL进行三维图形开发的一个应用实例。该测试仪以1.064um的激光光源模拟无穷远的点光源,利用红外面阵CCD自动寻找测量目标在不同视场角下的最佳像面位置,并对光学组件的成像光斑进行检测。采用重心法对所采集的光斑信号进行数据处理,分析光源通过被检测系统后在其焦平面上的成像光斑的质量。即分析焦平面上光斑能量分布情况:以三维立体图及截面图等显示不同测量条件下光斑的形状及能量分布(见图2)。6结束语从利用OpenGL所绘制的光斑图像的三维能量分布图中可以清楚地分辨出焦点处的能量最集中,图像质量及对称性最好,并能很方便地进行成像光斑的质量检测。测试结果表明:利用VC+6.0和OpenGL作为开发工具来进行三维图形的开发非常方便快捷,是一种切实有效的途径。参考文献:1田红鹏,马苗
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 安全日安全培训课件
- 超市劳动合同书
- 瓶装燃气安全使用培训课件
- 安全施工技术管理培训课件
- 东丽区打井工程方案流程(3篇)
- 顶面隔音工程及方案(3篇)
- 电气工程编制方案(3篇)
- 房屋工程维修方案范本(3篇)
- 地铁工程介入方案(3篇)
- 猫咪绘本课件
- GB/T 45701-2025校园配餐服务企业管理指南
- 煤矿关联交易管理制度
- 兵团职工面试试题及答案
- 氟化工艺安全操作课件
- 工程论文写作教学课件
- 分位数因子增广混频分位数回归模型构建及应用研究
- 惠州市人力资源社会保障局编制的劳动合同10篇
- 酒店餐饮部SOP(标准操作手册)
- 冶金机修安全培训课件
- 2022城市轨道交通列车驾驶员技能及素质要求第1部分:地铁、轻轨和单轨
- 小型公司合伙合同范本
评论
0/150
提交评论