OpenGL讲座稿_5. DirectX与OpenGL
DirectX是用途极为广泛的API,它并不局限于显示领域。目前的 DirectX中包含有Direct Graphics(Direct 3D + Direct Draw)、Direct Input、Direct Play、Direct Sound、Direct Show、Direct Setup、Direct Media Objects等多个组件,它提供了一整套的多媒体接口方案。但由于DirectX版本的更新主要在3D图形技术上,因此DirectX给人一种图形 API的感觉。
微软发布DirectX的初衷是为了弥补Windows系统对图形管理的不利,但第一代DirectX并未成功,因为当时OpenGL支持者众多,而初出茅庐的DirectX 1则显得稚嫩许多。
第二代DirectX在2D图形方面做了改进,加入了一些2D动态效果,采用了Direct3D的技术。3D应用程序接口采用”平滑模拟”和”RGB模拟” 两种模拟方式对3D图形进行加速计算。同时也采用了更加友好的用户设置程序并更正了应用程序接口的许多问题。整个DirectX的设计架构基本确定,它也是如今的DirectX的雏形。
1997年3D概念进入游戏界,DirectX 3推出了。DirectX 3版本是DirectX 2的简单升级版。
微软没有推出DirectX 4版本,直接推出了DirectX 5。DirectX 5对D3D的内容做了彻底修改,并且使游戏开发商们移植到他们的应用程序接口中更容易、更方便。除此之外,许多应用程序接口的细节部分也得到了改进。加入了雾化效果、Alpha混合等3D特效,使3D游戏中的空间感和真实感得以增强,还加入了S3的纹理压缩技术。同时,DirectX 5在其它各组件方面也有加强。
DirectX 6推出时,已被绝大多数厂商认可并成为实际上的主打游戏API。在这一版本的DirectX中,加入了双线性过滤、三线性过滤等优化3D图像质量的技术,游戏中的3D技术逐渐走入成熟阶段。
DirectX 7的推出伴随着产生了一个GPU的概念,同时在DirectX 7加入了硬件几何转换与光源处理(T&L)技术。虽然OpenGL中已有相关技术,但此前从未在民用级硬件中出现。GPU实际上是一组图形函数的集合,而这些函数由硬件实现,主要用于处理3D游戏中物体移动时的坐标转换及光源处理。硬件T&L的出现一定程度上将CPU解放出来。这一方面提高了整个系统的工作效率,另一方面则让显卡在一定程度上摆脱了CPU的束缚。
DirectX 8的出现全面赶超OpenGL。在DirectX 8中,硬件T&L被Vertex Shader和Pixel Shader取代。VS和PS单元的灵活性更大,它使GPU真正成为了可编程的处理器。这意味着程序员可通过它们实现3D场景构建的难度大大降低。VS和 PS在游戏中带来的最大改变就在于水面的效果。
DirectX 8中的Shader单元还是个简单尝试, DirectX 9中的Shader则成为了标准配置。除了版本升级到2.0外,DirectX 9中PS单元的渲染精度已达到浮点精度,传统的硬件T&L单元也被取消。全新的VertexShader(顶点着色引擎)编程将比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的着色指令增加到了1024条。尽管新的PixelShader(象素着色引擎) 还不支持流程控制,但最大指令数增加到了160条。在DirectX9里,顶点着色编程比以前复杂得多,新的VertexShader标准增加了流程控制,更多的常量,每个程序的VertexShader指令增加到了1024条。尽管新的象素着色还不支持流程控制,但最大指令数增加到了160条。 DirectX9真正关键的特性是64位RGBA色彩(每种颜色信道16位整数)和128位浮点精度(每种颜色信道32位浮点数)。颜色精度的巨大增加将带来让人震惊的视觉效果和图像质量。
预计在2005 年推出的DirectX10将完全放弃GPU当中的固定渲染模式,并且支持GPU行为的完全自由化,即GPU不在明确划分像素着色和顶点着色单元,并且支持多种任务,如2D/3D/视频加速等等任务的自由分配。DirectX10将加入Shader4.0技术,并首度实现RayTracing光线追踪,将位移贴图Displacement作为标准之一。
DirectX 与OpenGL相比的优点:OpenGL仅专注于图形(特别是3D图形)的处理,并且有部分图像处理能力。而DirectX则主要针对游戏而设计的,不仅有图形方面的处理,还包含了图像、声音和音乐、输入设备等等。因此从开发游戏的角度来说,DirectX拥有绝对的优势。另一方面,OpenGL由(由多个成员组成的)ARB进行管理和维护,因此功能的增加和版本的升级受到如知识产权(IP)争议等诸多因素的限制。而DirectX是由Microsoft 独立开发和维护的,本身不存在知识产权的争议问题,升级和维护方面也能够得到Microsoft的积极支持,从双方版本的发展历程就可见一斑。
DirectX 与OpenGL相比的缺点:OpenGL由于其”开放性”而能够得到众多软硬件厂商的支持,同时它是跨硬件平台、跨操作系统、跨语言的,通用性非常广。而 DirectX则是”专为Windows下的游戏程序设计”的,在中低端民用平台上具有比较好的优势,但从整个图形处理领域来说,实力则与OpenGL相差很多。
from: http://kwun.blogbus.com/logs/19051218.html
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 [...]
OpenGL讲座稿_2. 功能与特点
OpenGL提供了以下基本操作:
1. 绘制图元:真实世界里的任何物体都可以在计算机中用简单的点、线、多边形来描述。OpenGL提供了丰富的基本图元绘制命令,从而可以方便地绘制物体。
2. 变换:可以说,无论多复杂的图形都是由基本图元组成并经过一系列变换来实现的。OpenGL提供了一系列基本的变换,如取景变换、模型变换、投影变换及视口变换。
3. 光照处理:正如自然界不可缺少光一样,绘制有真实感的三维物体必须做光照处理。
4. 着色:OpenGL提供了两种物体着色模式,一种是RGBA颜色模式,另一种是颜色索引模式。
5. 反走样:在OpenGL绘制图形过程中,由于使用的是位图,所以绘制出的图像的边缘会出现锯齿形状,称为走样。为了消除这种缺陷,OpenGL提供了点、线、多边形的反走样技术。
6. 融合:为了使三维图形更加具有真实感,经常需要处理半透明或透明的物体图像,这就需要用到融合技术。
7. 雾化:正如自然界中存在烟雾一样,OpenGL提供了”fog”的基本操作来达到对场景进行雾化的效果。
8. 位图和图像:在图形绘制过程中,位图和图像是非常重要的一个方面。OpenGL提供了一系列函数来实现位图和图像的操作。
9. 纹理映射:在计算机图形学中,把包含颜色、alpha值、亮度等数据的矩形数组称为纹理。而纹理映射可以理解为将纹理粘贴在所绘制的三维模型表面,以使三维图形显得更生动。
10. 动画:OpenGL提供了双缓存区技术来实现动画绘制。
OpenGL 作为一个性能优越的图形应用程序设计界面(API),适用于广泛的计算机环境。从个人计算机到工作站和超级计算机,OpenGL都能实现高性能的三维图形功能。由于许多在计算机界具有领导地位的计算机公司纷纷采用OpenGL作为三维图形应用程序设计界面,所以OpenGL应用程序具有广泛的移植性。因此,OpenGL已成为目前的三维图形开发标准,是从事三维图形开发工作的技术人员所必须掌握的开发工具。
OpenGL的工作流程图(略 , 参考OpenGL Spec)。GL命令从左边进入。命令分为两种:一种指定需要进行绘制的几何图元对象属性(如顶点坐标值、颜色等),另一种则设定处理这些对象的各个步骤的工作方式(如设定视口、设定光照效果等)。
1. 求值器(Evaluator):通过输入的多项式参数进行计算并逼近曲线/曲面。
2. 顶点操作与图元装配(Per-Vertex Operations, Primitive Assembly):对顶点进行(从世界坐标系到视口坐标系的)几何变换和光照求值、对几何图元进行裁切操作。
3. 栅格化(Rasterization):完成图元信息从视口坐标系到设备坐标系的转换。最后得到一系列片断(Fragment)。
4. 片段操作(Per-Fragment Operations):包括根据片断深度值与深度缓冲区中的深度值进行深度检测并更新深度缓冲区(depth buffer)、融合(blending)操作等等。操作结果最终传送到帧缓冲区(Framebuffer)中。
5. 帧缓冲区(Framebuffer):可以对帧缓冲区进行读取操作,或者将数据进行帧缓冲区之间的移动。
6. 显示列表(Display List):保存(事先设定好的)一系列GL操作,类似于批处理。
7. 象素操作(Pixel Operations):对于如位图(bitmaps)和纹理(textures)等图元进行象素操作之后直接栅格化。
8. 纹理内存(Texture Memory):保存纹理信息,用于贴图操作。
上述流程仅仅是一个是对GL的一个大致描述,而不是严格的流程定义。对于一些对象,例如曲面,则可能在进行多边形化之前先进行了几何变换操作。
OpenGL应用领域十分宽广,如军事、电视广播、CAD/CAM/CAE、娱乐、艺术造型、医疗影像、虚拟世界等。它具有以下特点:
1. 工业标准:OARB(OpenGL Architecture Review Board)联合会领导OpenGL技术规范的发展,OpenGL有广泛的支持,它是业界唯一的真正开放的、跨平台的图形标准。
2. 可靠度高:利用OpenGL技术开发的应用图形软件与硬件无关,只要硬件支持OpenGL API标准就行了,也就是说,OpenGL应用可以运行在支持OpenGL API标准的任何硬件上。
3. 可扩展性:OpenGL是低级的图形API,它具有充分的可扩展性。如今,许多OpenGL开发商在OpenGL核心技术规范的基础上,增强了许多图形绘制功能,从而使OpenGL能紧跟最新硬件发展和计算机图形绘制算法的发展。对于硬件特性的升级可以体现在OpenGL扩展机制以及OpenGL API中,一个成功的OpenGL扩展会被融入在未来的OpenGL版本之中。
4. 可伸缩性:基于OpenGL API的图形应用程序可以运行在许多系统上,包括各种用户电子设备、PC、工作站以及超级计算机。
5. 容易使用:OpenGL的核心图形函数功能强大,带有很多可选参数,这使得源程序显得非常紧凑;OpenGL可以利用已有的其它格式的数据源进行三维物体建模,大大提高了软件开发效率;采用OpenGL技术,开发人员几乎可以不用了解硬件的相关细节,便可以利用OpenGL开发照片质量的图形应用程序。
6. 灵活性:尽管OpenGL有一套独特的图形处理标准,但各平台开发商可以自由地开发适合于各自系统的OpenGL执行实例。在这些实例中,OpenGL功能可由特定的硬件实现,也可用纯软件例程实现,或者以软硬件结合的方式实现。
from: http://kwun.blogbus.com/logs/19050297.html
OpenGL讲座稿_1. OpenGL简介
OpenGL (for “Open Graphics Library”) is a software interface to graphics hardware. The interface consists of a set of several hundred procedures and functions that allow a programmer to specify the objects and operations involved in producing high-quality graphical images, specifically color images of three-dimensional objects.
– glspec20.pdf
OpenGL(即开放性图形库Open Graphics Library),是一个三维的计算机图形和模型库。它源于SGI公司为其图形工作站开发的IRIS GL,在跨平台移植过程中发展成为OpenGL。SGI在1992年7月发布1.0版,后成为工业标准,由成立于1992年的OpenGL Architecture Review Board(ARB)负责维护。ARB成员以投票方式产生新的标准,并制成规范文档(Specification)公布,各软硬件厂商据此开发自己系统上的实现。只有通过了ARB规范全部测试的实现才能称为OpenGL。
OpenGL 的官方网站为:http://www.opengl.org
截至2003年10月,ARB投票成员(voting members)包括:
3Dlabs
Apple
ATI
Dell [...]
