基于OpenGL三维软件的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第五章基于OpenGL技术的软件系统设计
机器人三维运动仿真是机器人各项仿真中一个很重要的组成部分。它对于验证机器人工作原理、工作空间及进行碰撞检测等都具有非常重要的指导意义[4]。本章通将如何在Windows环境下使用VC++、OpenGL实现物体的三维实时运动仿真,并利用“模糊神经网络算法”来解决机械手臂到达指定环境中的某点位置运动的问题,为机械运动控制系统的三维运动仿真及操作控制提供了一种新的方法[52]。
5.1 OpenGL技术的实现
5.1.1 OpenGL的概述
OpenGL(全称:Open Graphics Library)是定义了一个跨编程语言、跨平台的编程接口的规格,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。OpenGL的英文全称是“Open Graphics Library”,顾名思义,OpenGL 便是“开放的图形程序接口”。虽然Direct X在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
OpenGL是与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL 的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是通过一些转换程序,可以很方便地将AutoCAD、3DS/3DSMAX等3D图形设计软件制作的DXF 和3DS模型文件转换成OpenGL的顶点数组。在OpenGL的基础上还有Open Inventor、Cosmo3D、Optimizer等多种高级图形库,适应不同应用,其中,Open Inventor应用最为广泛。该软件是基于OpenGL面向对象的工具包,提供创建交互式3D图形应用程序的对象和方法,提供了预定义的对象和用于交互的事件处理模块,创建和编辑3D场景的高级应用程序单元,有打印对象和用其它图形格式交换数据的能力。
OpenGL的发展一直处于一种较为迟缓的态势,每次版本的提高新增的技术很少,大多只是对其中部分做出修改和完善。1992年7月,SGI公司发布了
OpenGL的1.0版本,随后又与微软公司共同开发了Windows NT版本的OpenGL,从而使一些原来必须在高档图形工作站上运行的大型3D图形处理软件也可以在微机上运用。1995年OpenGL的1.1版本面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括改进打印机支持,在增强元文件中包含OpenGL 的调用,顶点数组的新特性,提高顶点位置、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度,引入了新的纹理特性等等。OpenGL 1.5又新增了“OpenGL Shading Language”,该语言是“OpenGL 2.0”的底核,用于着色对象、顶点着色以及片断着色技术的扩展功能。
OpenGL 2.0标准的主要制订者并非原来的SGI,而是逐渐在ARB中占据主动地位的3DLabs。2.0版本首先要做的是与旧版本之间的完整兼容性,同时在顶点与像素及内存管理上与DirectX共同合作以维持均势。OpenGL 2.0将由OpenGL 1.3的现有功能加上与之完全兼容的新功能所组成,如图5-1。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底的精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令[51]。
5.1.2 OpenGL三维成形过程
OpenGL具有超强的图形绘制能力,包括绘制物体、启动光照、管理位图、纹理映射、动画、图形增强及交互技术等功能。综合以上功能,作为图形硬件的软件接口,OpenGL主要是将三维的物体投影到一个二维平面上,之后处理得到像素,进行显示。OpenGL首先将物体转化为可以描述物体几何性质的顶点(V ertex)与描述图像的像素(Pixel),在执行一系列操作后,最终将这些数据转化成像素数据。也就是说,OpenGL是基于点的。在OpenGL中,无论何种情况,指令总是被顺序处理。有一组顶点定义的图元(Pirmitive)执行完绘制操作后,后继图元才能作用[53]。简单的图形生成过程如图1.1所示。
(1) 对图元的定义:图元由一组顶点定义,这一组顶点可以是一个或是多个顶点。每个顶点信息可以是二维的也可以是三维的,可以使用2~4个坐标。顶点信息可以由位置坐标、颜色值、法向量、纹理坐标组成。法线、纹理、颜色值会在处理每个顶点的过程中被使用和改变。纹理坐标决定图元上纹理图像的映射方式;法线是用于光照计算的;颜色与颜色的变化取决于是否有光照。OpenGL 将点、线段、多边形等通过在函数glBegin()和glEnd()之间一系列顶点的数据绘制出图形。
(2) 对图元的操作:OpenGL用交换矩阵、光照、反走样、像素操作等方法控制图元的绘制。图元的操作处理过程结束后,只留下图元可见部分,准备进行
光栅化(投影)处理[54]。像素处理比较特殊:对像素、位图、影像直接进行像素操作,然后进行光栅化,后者是有些数据被存储在纹理中供顶点使用。
(3) 光栅化(Rasterization)过程:将图元转化为二维图像,完成每个图像点的颜色与深度的计算,生成结果为基片(Fragment),即各图元的二维结果。
(4) 基片操作:处理过程包括基片是否遮挡、测试、融合等,
最后得到像素,
存入显示帧缓冲中,完成整个绘制过程。
顶点法向颜色纹理像素图
基 片
顶点零件加工顶点
像素
图5-1 OpenGL 图形绘制过程 5.2 基于VC++中的OpenGL 技术的实现
基于OpenGL 的开放性接口,利用目前流行功能强大的Visual C++开发环境编程,Visual C++以其与OpenGL 接口的高兼容性,是的开发过程简单易用。
5.2.1 VC++ 编程平台
几乎所有世界级的软件,从Web 浏览器到面向任务的企业级应用,都是使用Microsoft Visual C++开发系统来开发的。要用C++来开发Windows 的高性能应用程序,Visual C++是效率较高的首选工具之一。Visual C++作为一种程序设计语言,它同时也是一个集成开发工具,提供了软件代码自动生成和可视化的资源编辑功能。本次设计采用Visual C++ 6.0作为开发软件。
5.2.2 OpenGL 3D 建模工具
OpenGL 能够建立两种三维几何模型。一种是线框模型.一种是表面模型。在进行建模时任意复杂的三维实体用一个个小的多边形面来近似表示。OpenGL 的辅助库实际上也采用了这种方式来绘制图形。建模的关健就是设法把复杂的三维实体分解为小多边形。OpenGL 通过以下格式来定义多边形: