时间:2022-12-30 18:30:02 | 来源:信息时代
时间:2022-12-30 18:30:02 来源:信息时代
开放的图形程序接口 : 一种三维图形开发标准,是从事三维图形开发工作的必要工具,其稳定性、可靠性、可扩展性等特点,赋予了其强大的生命力和应用前景,OpenGL已经广泛应用于在CAD/CAM/CAE、医学图像处理、虚拟现实、娱乐、广告等领域。
OpenGL是个专业的3D程序接口,是一个功能强大,调用方便的底层3D图形库。OpenGL的前身是SGI公司为其图形工作站开发的IRIS GL。IRIS GL是一个工业标准的3D图形软件接口,功能虽然强大但是移植性不好,于是SGI公司便在IRIS GL的基础上开发了OpenGL。虽然DirectX在家用市场全面领先,但在专业高端绘图领域,OpenGL是不能被取代的主角。
OpenGL是个与硬件无关的软件接口,可以在不同的平台如Windows 95、Windows NT、Unix、Linux、MacOS、OS/2之间进行移植。因此,支持OpenGL的软件具有很好的移植性,可以获得非常广泛的应用。由于OpenGL是3D图形的底层图形库,没有提供几何实体图元,不能直接用以描述场景。但是,通过一些转换程序,可以很方便地将AutoCAD、3DS等3D图形设计软件制作的DFX和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的现有功能加上与之完全兼容的新功能所组成。借此可以对在ARB停滞不前时代各家推出的各种纠缠不清的扩展指令集做一次彻底地精简。此外,硬件可编程能力的实现也提供了一个更好的方法以整合现有的扩展指令。
1. OpenGL的图形处理功能
OpenGL实际上是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口,便于实现机械手的有关计算和图形算法,可保证算法的正确性和可靠性; OpenGL使用简便,效率高。它具有七大功能:
(1)建模: OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面(如Bezier、Nurbs等曲线或曲面)绘制函数。
(2)变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比、镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法与机器人运动学中的坐标变换方法完全一致,有利于减少算法的运行时间,提高三维图形的显示速度。
(3)颜色模式设置: OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。
(4) 光照和材质设置: OpenGL光有辐射光(emitted light)、环境光(ambient light)、漫反射光(diffuse light)和镜面光(specular light)。材质是用光反射率来表示。场景(scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。
(5)纹理映射(texture mapping): 利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。
(6)位图显示和图像增强: 图像功能除了基本的拷贝和像素读写外,还提供融合(blending)、反走样(antialiasing)和雾(fog)的特殊图像效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效果。
(7)双缓存(double buffering)动画: 双缓存即前台缓存和后台缓存,简而言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。此外,利用OpenGL还能实现深度暗示(depth cue)、运动模糊(motion blur)等特殊效果。从而实现了消隐算法。
OpenGL图形库一共有100多个函数。其中核心函数有115个,它们是最基本的函数,其前缀是gl,OpenGL实用库(OpenGL utility library,GLU)的函数功能更高一些,如绘制复杂的曲线曲面、高级坐标变换、多边形分割等,共有43个,前缀为glu; OpenGL辅助库的函数是一些特殊的函数,包括简单的窗口管理、输入事件处理、某些复杂三维物体绘制等函数,共有31个,前缀为aux。此外,还有六个WGL函数非常重要,专门用于OpenGL和Windows 95窗口系统的连接,其前缀为wgl,主要用于创建和选择图形操作描述表(rendering contexts)以及在窗口内任一位置显示字符位图。这些功能是Windows 95对OpenGL的唯一补充。
另外,还有五个Win32函数用来处理像素格式(pixel formats)和双缓存。由于它们是对Win32系统的扩展,因此不能应用在其他OpenGL平台上。
2. OpenGL及其他图形处理中的常用术语
(1)走样(aliasing):指一种渲染技术,把需要进行渲染的图元的颜色赋值给像素点,不论图元是覆盖了整个像素区域还是仅仅覆盖了一部分。走样的结果将产生锯齿状的边缘,或锯齿状图形。
(2)第四种颜色分量(alpha): alpha颜色分量并不直接显示。其典型的应用是控制颜色的混合。习惯上,OpenGL的alpha分量对应着不透明的程度,也就是说alpha值为1.0表示完全不透明,而0.0表示完全透明。
(3)动画(animation):该过程是指对视景不断渲染,以足够快的速度平稳地改变视点或(和)物体位置来实现运动的幻觉。OpenGL的动画几乎全部是通过双缓冲器来实现的。
(4)反走样(antialiasing): 指一种渲染技术,根据需要渲染的图元所覆盖的像素区域大小来分配像素颜色。反模糊化渲染减少或消除了模糊化渲染产生的锯齿图形。
(5) 特定应用裁剪(application-specific clipping): 指在人眼坐标中对相对于某平面的图元裁剪。该平面由glClipPlane()函数定义的应用程序指定。
(6)位平面(bitplane):与像素一一对应所组成的矩形阵列。帧缓冲器由多个位平面组成。
(7)混合(blending): 将两种颜色分量混成变为一种颜色分量,通常是在这两个颜色分量之间做线形插值。
(8)布尔运算(Boolean operation): 英国的数学家布尔在1847年发明的一种处理二值关系的逻辑数学计算法,包括联合、相交、相减。在图形处理操作中引用了这种逻辑运算方法以使简单的基本图形组合产生新的形体。并由二维布尔运算发展到三维图形的布尔运算。
(9)缓冲(buffer): 又称缓冲器,用于存储单一变量(如深度或绿色)或单一索引(如颜色索引或模板索引)的一组位平面。在一些情况下,红色、绿色、蓝色和alpha各单缓冲器统一为一个颜色缓冲器。
(10)客户(client): 指发送OpenGL命令的计算机,发出OpenGL命令的计算机可以通过网络连接,在另一台计算机上执行命令,或者也可在本地计算机上执行。
(11)客户内存(client memory): 客户计算机的主内存(程序变量存储其中)。
(12)裁剪坐标(clip coordinates): 在透视分割之前,投影矩阵变换之后的坐标系。视图体的剪辑是在裁剪坐标系中进行的,但特定应用的裁剪并非如此。
(13)裁剪(clipping): 指除去几何图元中裁剪平面定义的半空间之外的部分的过程。对于点,则简单地擦除定义空间外的点;对于一条直线或多边形,除擦除定义空间外的部分之外,还要附加生成必要的顶点,以保持裁剪的半空间内图元的完整性。几何图元和当前的光栅位置(当有定义时)常常按照由左部、右部、底部、顶部、近处和远处的视图体的平面来裁剪。应用程序中,可以指定可选择的、应用于人眼坐标的特定应用裁剪平面。
关键词:数据,程序,图形