OpenGL学习历程一:概览
OpenGL背景
OpenGL1.0规范发布于1992年。作为一个成熟而久负盛名的扩平台的计算机图形应用程序接口规范,它已经广泛应用于游戏,影视,军事,航空航天,地理,医学,机械设计,以及各类科学数据可视化的领域。另外,随着网络以及移动平台的崛起,WebGL以及OpenGL ES的标准也逐渐深入人心,这两者同OpenGL有着千丝万缕的联系。
OpenGL几乎支持所有的主流操作系统平台,包括Windows,Max OS X以及各种UNIX平台。同时也可以用于几乎所有流行的编程语言包括C/C++,Java,C#,VB,Python,Perl等。可以说OpenGL无处不再。而目前的游戏引擎cocoa2d-x底层的渲染即是采用了OpenGL技术,要理解以及修改引擎的架构,就不可避免的要接触OpenGL。
什么是OpenGL
OpenGL即Open Graphic Library,开放图形库。
OpenGL是图形硬件的一种软件接口(The OpenGL graphic system is a software interface to graphics hardware.),即可以对图形硬件设别进行访问的软件库,方便我们开发交互式的三维计算机图形应用程序。
OpenGL自身并不包含任何执行窗口任务或者处理用户输入的函数,不过没关系,我们将会用到一个第三方扩平台的库GLUT(OpenGL Utitlity Tookit)来帮助处理这些窗口时间,关于它的内容接下来介绍。另外,OpenGL也没有提供任何用于表达三维物体模型(models of three-dimensional objects),或者读取图像文件(例如JPEG文件)的操作。而取而代之,我们需要通过一系列图元(Primitive)(包括点、线、三角形以及Patch)来创建三维空间的物体。
OpenGL是采用客户端-服务器的形式实现的,我们自己所编写的应用程序可以当作客户端,而计算机图形硬件厂商所提供的OpenGL实现可以看作是服务端。(OpenGL is implemented as a client-server system, with the application you write being considered the client, and the OpenGL implementation provided by the manufacturer of your computer graphics hardware being the server.)
OpenGL是基于光栅化(rasterization-based system),用于生成图像。但还有其他方法例如光线跟踪(ray tracing),但有可能也需要用到OpenGL来显示图像。
OpenGL程序渲染图像的主要操作
1,为构建形状(Shape)指明来自OpenGL的几何图元的数据。
2,使用不同的着色器(Shapes)对输入的图元数据执行计算操纵,有次来判断他们的位置、颜色、以及其他渲染属性。
3,将输入图元的数学描述转化为在屏幕位置上对应的片段(fragments)。这个过程称之为光栅化(Rasterization)。
4,最后,为每个经过光栅化阶段的片段执行片段着色器(frament shader),该操作决定了片段的最终颜色以及位置。
5,有时可能需要对每个片段(pre-fragment)执行额外的操作。例如判断片段产生的对象是否可见,或者将片段的颜色和当前屏幕位置的颜色相融合。
常用的图形学名词
渲染(Rendering):表示计算机从模型创建最终图像的过程。
模型(Model):或者又称为对象,是通过几何图元(geometric primitives)例如(pint)、线和三角形来构建的。而这些几何图元是通过顶点(vertices)来指明的。
着色器(Shaders):它是图形硬件设备所执行的一类特殊函数。理解着色器的最好方法是把它看作专门为图形处理单元(GPU)编译的一种小型程序。
OpenGL在其内部包含了所有的编译器工具,可以直接从着色器代码创建GPU执行所需的代码。
在OpenGL中,会用到四种不同的着色阶段(shader stages),最常用的包括顶点着色器(vertex shaders)和片段着色器(fragment shaders)。前者用于处理顶点数据(vertex data),后者用于处理光栅化后的片段数据。
像素(pixel):指的是显示器上最小的可视单元。在计算机系中存储于帧缓存中。
帧缓存(framebuffer):由图形硬件设备管理的一块独立的内存区域,可以直接映射到最终的显示设备上。