OpenGL讲座稿_3. 发展历程

1. 1992年7月1日由SGI发布OpenGL 1.0版,同年ARB成立。此后的每一次版本升级都与上一个版本保持完全向下兼容(详见规范文档2.0 Appendix C-I)。

2. 1995年12月OpenGL 1.1面市,该版本比1.0的性能有许多提高,并加入了一些新的功能。其中包括提高纹理映射能力,增加一些几何与片断操作,加入顶点数组,提高顶点坐标、法线、颜色、色彩指数、纹理坐标、多边形边缘标识的传输速度等等。
a) 顶点数组(Vertex Array):将顶点信息表示成数组的形式传递给GL,以降低传输非显示列表数据过程中的子调用次数,提升传输效率(例如,充分利用DMA的硬件特性)。
b) 多边形偏移(Polygon Offset):可将经过栅格化的多边形片断的深度值进行偏移操作。
c) 逻辑操作(Logical Operation):通过逻辑操作将由RGBA方式表示的片断融合(merged)至帧缓存中。
d) 纹理图像格式(Texture Image Formats):使用内部格式(internal format)表示存储的纹理信息。
e) 纹理替换环境(Texture Replace Environment):1.1版本的OpenGL中可以显式地使用纹理色彩替换片断色彩,在1.0版本中这种替换(贴图)只能隐式进行。
f) 纹理代理(Texture Proxies):纹理代理允许具体的GL实现声明适用于本实现的最大纹理尺寸(而不是由GL强制定义一个最大纹理尺寸),用户可在运行时间通过代理查询机制得到的纹理参数信息对自定义纹理进行适当处理。
g) 纹理和子纹理的拷贝(Copy Texture and Subtexture):可将帧缓冲区中的数据定义为纹理。
h) 纹理对象(Texture Objects):可将一组纹理(以及每个纹理相应的形状信息state)视为一个对象进行处理。

3. 1998年3月16日发布OpenGL 1.2。1.2版本主要提升了OpenGL的纹理映射能力,以及对象素处理管线进行了增强。从1.2版开始,技术手册中将一部分GL特征定义为可选项,具体的OpenGL实现可以选择是否提供对这些特征的支持。
a) 三维贴图(Three-Dimensional Texturing):OpenGL1.2中可使用三维贴图,同时定义了三维图像在内存中的格式以及象素存储方式。三维贴图的一个重要应用是对成套图像 (volumes of image data)进行渲染。
b) BGRA象素格式(BGRA Pixel Formats):扩展了内存颜色存储格式。用于匹配Windows平台中的文件与帧缓冲区颜色存储格式。
c) 压缩象素格式(Packed Pixel Formats):在内存中压缩象素可使用基本数据类型(unsigned byte/short/integer)进行表示。
d) 法矢量的重缩放(Normal Rescaling):法矢量可以根据模型视图矩阵得到某个常量进行重新缩放。在多数情况下这一操作比重新规格化更加快速,而同时又能确保得到结果就是单位法矢量。
e) 独立镜面光色彩(Separate Specular Color):光照处理过程被更改为:生成包含发射光、环境光与漫射光的主色彩(Primary Color)以及包含镜面光的副色彩(Secondary Color)。主色彩被贴图环境替换,在贴图完成后再添加副色彩得到最终的渲染效果。用于增强其表面色彩由创建光源决定而不是由表面属性决定的物体 (allows highlights whose color is based on the light source creating them, rather than surface properties)。
f) 纹理坐标边界限定(Texture Coordinate Edge Clamping):通常GL限定纹理坐标范围为[0, 1]。当进行纹理坐标限定时,将一半纹理图像边缘的颜色与一半纹理边缘颜色之和作为纹理边缘的颜色。有的情况下不需要进行这样的求取平均值操作,因此引入 CLAMP_TO_EDGE限定模式,纹理边缘的颜色值即为对应的纹理图像边缘的颜色值。
g) 纹理细节等级控制(Texture Level of Detail Control):增加两个对纹理细节等级参数λ的约束。一是将λ限制在特定的浮点数范围内,另一是将mipmap图像阵列的选取限定在某个子阵列范围。这两个约束允许一个大的纹理在加载和初始化的时候使用较低的分辨率,而当要求更高分辨率时再逐渐增加其分辨率。
h) 顶点数组的元素绘制范围(Vertex Array Draw Element Range):(略)
i) 图像处理子集(Imaging Subset):高级图像处理子集作为可选项,并不要求所有应用都必须支持。

1998年10月14日发布OpenGL 1.2.1,进行了一些小的改动。

4. 2001年8月14日发布OpenGL 1.3。1.3版本主要提升了纹理映射能力。
a) 压缩纹理(Compressed Textures):压缩纹理可减少显存占用量,并且提高光栅化速度。GL提供一个架构,使扩展(extersion)可以在此基础上提供特定的压缩格式。应用使用一组通用内部格式指定纹理以压缩方式创建,而不需指定特定的压缩格式(如S3TC或FXT1)。
b) Cube Map纹理(Cube Map Textures):Cube Map提供了一种新的纹理产生方案,由正方体六个面的图像产生。提供两种新的纹理坐标产生方式,GL_REFLECTION_MAP, GL_NORMAL_MAP,用于反射贴图或环境贴图。
c) 多重采样(Multisample):多重采样提供一种新的反走样方法,把每个像素分成几个点采样,对这些采样点取平均值。当支持多重采样时,增加一个辅助多重采样缓冲区,像素点的颜色、Z深度、模板值都存在该缓冲区中。多重采样开销昂贵,所以不会广泛支持。
d) 多重纹理(Multitexture):多重纹理提供多个纹理单元。各单元相对独立,拥有自己的纹理坐标数组、纹理图像、过滤参数、纹理环境等状态。
e) 纹理Add环境模式(Texture Add Environment Mode):提供将生成的像素段与纹理源的颜色相加的环境模式。
f) 纹理Combine环境模式(Texture Combine Environment Mode):提供更自由的可编程的环境模式。包括直接传递、相乘、相加、有偏相加、相减、线性插值。可为RGB和Alpha指定不同操作,结果可被1/2/4倍缩放。
g) 纹理Dot3环境模式(Texture Dot3 Environment Mode):提供与指定参数做点积的环境模式,结果替换输出颜色的RGB或RGBA。点积使用伪有符号数计算,以实现逐像素光照计算。
h) 纹理边框限定(Texture Border Clamp):增加新的纹理边框限定方式:CLAMP_TO_BORDER。与CLAMP_TO_EDGE方式相反,此方式下纹理边缘的颜色值仅为其边界的颜色值。
i) 转置矩阵(Transpose Matrix):增加新的函数和符号以允许应用使用行主序矩阵。行主序矩阵和C语言中二维数组的存储顺序相同。传统的GL函数使用列主序矩阵。

5. 2002年7月24日发布OpenGL 1.4。1.4版本最重大的改进在于增加了ARB_vertex_program扩展,用于支持可编程顶点处理(programmable vertex processing)。
a) Mipmap自动生成(Automatic Mipmap Generation)。
b) 混合平方(Blend Squaring)。源混合函数中增加了两种模式:SRC_COLOR和ONE_MINUS_SRC_COLOR,目标混合函数中增加了两种模式:DST_COLOR和ONE_MINUS_DST_COLOR。
c) 图像处理子集中的更动(Changes to the Imaging Subset)。
d) 深度纹理和阴影(Depth Textures and Shadows):新的内部纹理格式DEPTH用于表现深度值。应用于基于图像的阴影构造(image-based shadow casting)、置换映射(displacement mapping)以及基于图像的绘制(image-based rendering)等技术中。
e) 雾坐标(Fog Coordinate):对于一个需要进行雾效果渲染的片断,可以指定雾效果的原点坐标,而不是使用眼坐标作为雾效果原点。用于生成更加复杂的雾模型。
f) 多重绘制数组(Multiple Draw Arrays):通过使用MultiDrawArrays()与MultiDrawElements(),可实现在一次调用中绘制多个图元的操作。
g) 点参数(Point Parameters):点属性设置命令PointParameter()中加入新的点几何特性,允许实现点的线性或三次距离衰减(linear or quadratic distance attenuation)效果,同时增加了对点大小光栅化以及点透明度的控制。用于进行粒子或者点光的距离衰减渲染效果。
h) 副色彩(Secondary Color):即使在光照效果被屏蔽的状态, 也可以通过将副色彩作为SecondaryColor()命令中的顶点参数值而对其进行改变。
i) 独立混合函数(Separate Blend Functions):使用BlendFuncSeparate()扩展了混合能力,允许对RGB与alpha独立设置混合方式。
j) 模板Warp(Stencil Wrap):新的模板操作INCR_WRAP和DECR_WRAP允许模板中的数值出界循环(INCR_WRAP当当前值为最大值时,下一值为 0;DECR_WRAP当当前值为0时,下一值为最大值),而不是将其限定在最大值与最小值之间。应用于使用模板缓冲区进行片断inside- outside计算(per-fragment inside-outside primitive computations)的算法中。
k) 纹理Crossbar环境模式(Texture Crossbar Environment Mode):扩展了纹理组合环境模式COMBINE,允许使用其他纹理单元的色彩作为纹理组合数据源。
l) 纹理细节级别(LOD)偏置(Bias)(Texture LOD Bias):设置纹理过滤控制参数TEXTURE_LOD_BIAS,用于偏置λ,从而获得模糊或者锐化的纹理。可用于产生景深(depth of field)等特殊效果。
m) 纹理镜像重复(Texture Mirrored Repeat):增加MIRRORED_REPEAT纹理warp模式,映射纹理为源纹理两倍大小,而新增加的那一部分为源纹理的镜像。可用于表面纹理无缝拼接中。
n) 窗口栅格坐标(Window Raster Position):可使用WindowPos()直接指定窗口坐标。适用于图像处理以及一些2D操作。

6. 2003年7月29日发布OpenGL 1.5,其中包含了OpenGL ARB的正式扩展规格绘制语言”OpenGL Shading Language”规范书,以及使用于高级着色语言程序中的ARB_shader_objects(着色对象),ARB_vertex_shader(顶点着色)和ARB_fragment_shader(片断着色)扩展,这些扩展功能将作为OpenGL 2.0底核。OpenGL 1.5的其他新功能如下:
a) 缓存对象(Buffer Object):允许将多种类型的数据(特别是顶点数组)暂存(cached)在服务器端高速显存中,从而提高OpenGL的数据传输能力。
b) 遮蔽查询(Occlusion Query):应用通过遮蔽查询机制可以查询某个/组图元可见(即对其进行了绘制)的象素数(更准确的说法是采样点数)。主要用于判断图元的可见性。
c) 阴影功能(Shadow Functions):扩展纹理比较功能,使其支持所有的八种比较操作,而不仅仅是LEQUAL和GEQUAL两种操作。
d) 符号更改(Changed Tokens):为了保证一致性,使用新的符号代替旧有的某些不一致的符号名,同时保留这些旧式符号以保证兼容性。

以开发API为宗旨的业内团体Khronos Group于同一天宣布了支持嵌入系统用的2D/3D图形规格”OpenGL ES 1.0″并且制订了EGL 1.0,定义在多种操作系统中安装OpenGL ES的标准方法。

OpenGL为ES定义OpenGL的subset profile的规格。考虑到在嵌入式应用软件中使用,减小了内存使用量。当在软件中安装OpenGL ES 1.0时,只需要50KByte的容量,并且可以利用硬件实现固定小数点、浮动小数点以及图形加速器。

此外Khronos Group公布了用来制作动态播放媒体的API规格OpenML的开发组件”Software Development Kit(SDK)for OpenML 1.0″α版。使用该SDK可以制作用来取得、处理、同步以及播放数码媒体内容的程序。α版支持Windows和Linux,通过Khronos Group的网站免费提供。同时SGI也公开了该SDK的支持IRIX的版本。

from : http://kwun.blogbus.com/logs/19050831.html

标签:,
News, OpenGL

相关日志

If you enjoyed this post, please consider to leave a comment or subscribe to the feed and get future articles delivered to your feed reader.

Leave Comment

(必填)

(必填)