OpenGL概述

来源:互联网 发布:多益网络注册 编辑:程序博客网 时间:2024/05/18 00:12

OpenGL(Open Graphics Library开发图形库)是一个跨编程语言、跨平台的三维的计算机图形模型库。

OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应用程序无须考虑其运行环境所在平台与操作系统,在任何一个遵循OpenGL标准的环境下都会产生相同的可视效果。OpenGL不是一种编程语言,而是一种API。

 

【OpenGL功能】

OpenGL作为一个性能优越的图形应用程序设计界面API,它独立于硬件和窗口系统,在运行各种操作系统的各种计算机上都可用,在军事,广播电视,CAD/CAM/CAE,娱乐,艺术造型,医疗影像,虚拟世界等领域都有着广泛的应用。它具体有一下功能。

1.    模型绘制:OpenGL能够绘制点,线,和对边形。应用这些基本的形体,可以构造出几乎所有的三维模型。OpenGL通常用模型的多边形的顶点来描述三维模型。

2.    模型观察:在建立了三维景物模型后,就需要用OpenGL描述如何观察所建立的三维模型。观察三维模型是通过一系列的坐标变换进行的。模型的坐标变在使观察者能够在视点位置观察与视点相适应的三维模型景观。在整个三维模型的观察过程中,投影变换的类型决定观察三维模型的观察方式,不同的投影变换得到的三维模型的景象也是不同的。最后的视窗变换则对模型的景象进行裁剪缩放,即决定整个三维模型在屏幕上的图像。

3.    颜色模式的指定:OpenGL应用了一些专门的函数来指定三维模型的颜色。程序开发者可以选择二个颜色模式,即RGBA模式和颜色表模式。在RGBA模式中,颜色直接有RGB值来指定;在颜色表模式汇总,颜色值则由颜色表中的一个颜色索引值来指定。开发者还可以选择平面着色和光滑着色二种着色方式对整个三维景观进行着色。

4.    光照应用:用OpenGL绘制的三维模型必须加上光照才能更加与客观物体相似。OpenGL提供了管理四种光(辐射光,环境光,镜面光和漫射光)的方法,另外还可以指定模型表面的反射特性。

5.    图像效果增强:OpenGL提供了一系列的增强三维景观的图像效果的函数,这些函数通过反走样,混合和雾化来增强图像的效果。反走样用于改善图像中线段图形的锯齿而更平滑,混合用于处理模型的半透明的效果,雾化使得影像从视点到远处逐渐褪色,更接近于真实。

6.    位图和图像处理:OpenGL还提供了专门对位图和图像进行操作的函数

7.    文理映射:三维景物因缺少景物的具体细节而显得不够真实,为了更加逼真地表现三维景物,OpenGL提供了纹理映射的功能。OpenGL提供了一系列纹理映射函数使得开发者可以十分方便地把真实图像贴到景物的多边形上,从而可以在视窗内绘制逼真的三维景观。

8.    实时动画:为了获得平滑的动画效果,需要先在内存中生成下一副图像,然后把已经生成的图像从内存拷贝到屏幕上,这就是OpenGL的双缓存技术(double buffer).OpenGL提供了双缓存技术的一系列函数。

9.    交互技术:目前有很多图形应用需要人机交互,OpenGL提供了方便的三维图形人机交互接口,用户可以选择修改三维景观中的物体。

 

【OpenGL的工作方式】

1.     OpenGL的体系结构:OpenGL是一套图形标准,它严格按照计算机图形学原理设计而成,符合光学和视觉原理,非常适合可视化仿真系统。通常,一个完整的窗口系统的OpenGL图形处理系统的结构:图形硬件-->>操作系统-->>窗口系统-->>OpenGL-->>应用软件。

2.     OpenGL的流水线:当应用程序进行OpenGLAPI函数调用的时候,OpenGL命令将被放在一个命令缓冲区中,这样,命令缓冲区中包含了大量的命令,顶点数据和纹理数据。当这个缓冲区被清空时,缓冲区中的命令和数据都将传递给流水线的下一个阶段,或者说,只有当命令缓冲区被清空时,OpenGL命令才会被执行。

3.     在OpenGL中,命令缓冲区中的几何顶点数据通常还要进行几何变换以及光照计算,并通过指定的方法进行投影,为下一步的光缆化作准备。光栅化根据图形的几何形状,颜色和纹理数据产生一系列图形的帧缓存地址和图元的二维描述值,光栅化的结果最后被放置在帧缓存中。帧缓存是图形显示设备的内存,这样图像就显示在屏幕上了。

4.     OpenGL状态机:OpenGL是一种直接模式的API,每条命令根据当前的渲染状态都会产生某种立即效果。渲染状态是各种标记,他们指出哪些特性是打开的,哪些是关闭的,以及应该如何应用他们。在OpenGL中,使用glEnable函数和glDisable函数来启用和禁用渲染特征。

 

【OpenGL的组成】

OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中,开发基于OpenGL的应用程序,必须先了解OpenGL的库函数。OpenGL函数命令方式十分有规律,每个库函数均有前缀gl核心库、glu实用库、glut实用工具包、aux辅助库,分别表示该函数属于OpenGL基本库、实用库或辅助库。 

1.     OpenGL核心库:包含了115个最基本的命令函数,以gl作为前缀;这部分函数用于常规的,核心的图形处理,如建立各种各样的几何模型、进行坐标变换、产生光照效果、进行纹理映射、产生雾化效果等所有的二维和三维图形操作。由于许多函数可以接收不同的数据类型的参数,因此派生出来的函数原形有300多个。

2.     OpenGL实用库:包含了43个函数,以glu作为前缀;实用函数库是比核心库更高一层的函数库;这部分函数通过调用核心库的函数,来实现一些复杂的操作,如纹理映射、坐标变换、网格化、曲线曲面以及二次物体(圆柱、球体等)绘制等。

3.     OpenGL辅助库:包含了31个函数,以aux作为前缀;但它们不能再所有的OpenGL平台上使用。OpenG的辅助库的函数主要用于窗口管理、输入输出处理以及绘制一些简单的三维形体。

4.     OpenGL实用工具包:OpenGL实用工具包(OpenGL Utility Toolkit)包含了30+个函数,以glut为前缀。其中的函数主要提供基于窗口的工具,如窗口系统的初始化,多窗口管理,菜单管理,字体以及一些较复杂物体的绘制等。由于glut库中的窗口管理函数是不依赖于运行环境的。因此OpenGL汇总的工具库可以在所有的OpenGL平台上运行,在我们的例子中均使用glut库建立OpenGL程序运行框架。

5.     Windows专用库:包含了6个函数,以wgl作为前缀;用于连接OpenGL和windowsNT,这些函数用于在windowsNT环境下的OpenGL窗口能够进行渲染着色,在窗口内绘制位图字体以及把文本放在窗口的某个位置等,这些函数把windows和opengl柔和在一起。

6.     Win32API函数库:5个,无前缀。 主要用于处理像素存储格式和双帧缓存。

 

【OpenGL的数据类型】

由于OpenGL具有平台无关性,它定义了自己的数据类型,这些数据类型将映射为常规的C语言数据类型,在程序中也可以直接使用这些C语言数据类型。它们的关系如下:

OpenGL 数据类型内部表示法定义为C类型C字面值后缀GLbyte8位整数signed char
bGLshort
16位整数shortsGLint, GLsizei
32位整数songlGLfloat, GLclampf
32位浮点数floatfGLdouble, GLclampd
64位浮点数doubledGLubyte, GLboolean
8位无符号整数unsigned charubGLshort
16位无符号整数unsigned short
usGLunit, GLenum, GLbitfield
32位无符号整数unsigned long
ui

 

【OpenGL函数命令约定】

OpenGL函数都遵循一个命名约定,通过这个约定可以了解函数来源于哪个库,需要多个参数以及参数的类型。每一个函数都有一个根段,代表该函数相应的OpenGL命令。所有的OpenGL函数都采用以下格式:

<库前缀><根命令><可选的参数个数><可选的参数类型>

 

eg:函数glColor3f(...),

gl表示这个函数来自库gl.h,

color是该函数的根段,表示该函数用于颜色设定,

3f表示这个函数采用了三个浮点数参数。

这种把参数数目和参数类型加入OpenGL函数结尾的约定使人们更容易记住参数列表而无需查找它。

 

0 0
原创粉丝点击