OpenGL

OpenGL本身作为一个图形化处理的api,是一个跨平台,跨语言的图形化程序接口,它将计算机资源抽象成为一个个的OpenGL的对象,对这些资源的操作抽象为一个个OpenGL指令。

OpenGL ES是面向嵌入式设备的三纬图形化的API子集。

1、OpenGL 上下文

所谓的上下文其实是一个配置的环境,内部包含了各种参数组成,更像是一个多种参数状态的巨大的状态机,对OpenGL的操作,本质就是对这个上下文环境中的参数的各种修改,由于不同的绘制模块可能需要使用完全独立的状态管理,因此可以在程序中创建不同的上下文,而在不同的上下文中共享一公分纹理或者缓冲区资源,减少切换换上下文的性能开销。

2、帧缓冲区(FrameBuffer)

OpenGL最终是要输出图像的,输出图像就需要画布、画板。这里画板的概念是在这里就是帧缓冲区,那么画板上的画布就是 纹理(Texture)和渲染缓冲区(RenderBuffer),而放置这些画布的位置被称为帧缓存区的附着(Attachment)

3、附着(Attachment)

附着就是画板上的夹子,夹住了哪个画布(纹理或者渲染缓冲区)就在哪里绘制。

画板上的夹子有很多种,针对不同的使用场景,可以分为颜色附着(colorAttachment)/深度附着(DepthAttachment)/模板附着(stencilAttachment)。颜色附着一般用来附着输出绘制图像的颜色数据,也就是平时看到的RGB数据;深度附着附着输出图像的深度数据,一般用于3D渲染;模板附着运用于输出模板数据。

4、纹理和渲染缓冲区

作为画布,存储了实际的图像数据,渲染缓冲区对应了操作系统的窗口,而纹理一般有立体纹理,1D/2D/3D的纹理类型。一般纹理和渲染缓冲区不能存在于同一个帧缓存区上。

5、顶点数组和定点缓冲区

定点数据就是绘制的图像的骨架,现实中OpenGL中的图像由图元组成,在OpenGL ES中主要包括点、线、三角形。一般图像数据在调用函数时,通过内存传入顶点数据,这部分之前存储在内存中的数据,被称为顶点数组,提前粉喷一部分显存的做法,这部分显存被称为顶点缓冲区。

6、索引数组和索引缓冲区

索引数据的目的是为了实现顶点的复用,通过索引数据,指示OpenGL绘制顶点的顺序,可以减少顶点的重复计算,一定程度的实现重新组合图像。

7、着色器程序(Shader)

OpenGL是将固定的渲染管线变成了可编程渲染管线,因此OpenGL调用绘制函数前,还需要指定一个Shader编译成的着色器程序。

常见的着色器主要有顶点着色器(VertexShader),片段着色器(FragmentShader)/像素着色器(PixelShader),几何着色器(GeometryShader),曲面细分着色器(TessellationShader)。片段着色器和像素着色器只是在OpenGL和DX中的不同叫法而已。可惜的是,直到OpenGL ES 3.0,依然只支持了顶点着色器和片段着色器这两个最基础的着色器。

OpenGL的绘制流程,首先由顶点着色器对传入的顶点数据进行运算,在通过图元装配,将顶点转换为图元,然后进行光栅化,将图元这种矢量图像转换为珊格化数据,在送入片段着色器进行运算,

你可能感兴趣的:(cocos2d,游戏引擎)