OpenGL初探

以下为个人学习过程中,记录的OpenGL的知识点。详情请咨询OpenGL Wiki。

现有图形API简介

OpenGL(Open Graphics Library)从名称可以看出是一个编程图形程序接口库,具体作用是将计算机的资源抽象为一个个OpenGL对象,再把对这些对象的操作转为一个个OpenGL的指令。

openGL ES(openGL for Embedded Systems)这个是OpenGL针对嵌入式设备而设计的一套系统API,去除了许多不必要和性能较低的API。

DirectX(Direct eXtension)简称DXDirectX是由很多API组成的,按功能性质可分为四大部分:显示(图形)部分、音频部分、输入部分、网络部分。值得注意的是它不支持Windows以外的平台。

Metal这个是WWDC 2014上,Apple为游戏开发者提供的底层渲染编程接口,能够为3D图像提高10倍的渲染性能。

OpenGL和OpenGL ES的区分:

openGL ES为OpenGL的子集,OpenGL ES只适用于嵌入式设备,OpenGL可以跨编程语言和平台,适用面更广。


openGL坐标变换流程

整个流程可以理解为将一个3D物体模型映射为屏幕上的2D图形。其中经历了将物体坐标转为世界坐标(猜测是为了统一数据标准),加入观察者坐标(不同的视角会有不同的视觉效果),计算出视图投影变换,最后根据设备屏幕标准显示。

备注:黑色选中方框内为OpenGL内部变换处理,其他的用户可进行自定义处理。


着色器的渲染流程

专业名词解析

管线,将OpenGL渲染图形的流程形容为管线,可以看出渲染流程是有特定顺序执行不同的任务的。

固定管线/存储着色器其实可看作是为了方便开发者实现特定功能而制作的优惠套餐,本质上还是管线。

着色器程序为将管线转为可编程管线而开放的着色器程序(由着色器编译而成),目前仅支持顶点着色器和片段着色器。

顶点着色器(VertexShader),一般用来处理图形的每个顶点变换(旋转/平移/投影等)。逐一进行顶点属性运算,这个过程是并行的,并且运算过程中无法访问其他顶点数据。通常计算的顶点属性包括顶点坐标变换、逐顶点光照等。

片元着色器(FragmentShader)也叫片段着色器。 一般用于处理图形中每个像素点颜色计算和填充,与顶点着色器一样,片元着色器是逐像素并行运算。

顶点数据,指的是所绘制图形的顶点位置数据。这个数据存储在内存中被称为顶点数组,存入显存中为顶点缓冲区

光栅化,是将一个图元转变为一个二维图象(其实只是布满平面,没有真正的替换帧缓存区)的过程。二维图象上每个点都包含了颜色、深度和纹理数据。将该点和相关信息叫做一个片元(fragment)。(这就是片元和像素之间的关键区别,虽然两者的直观印象都是的像素,但是片元比像素多了许多信息,在光栅化中纹理映射之后图元信息转化为了像素)。

纹理本质是图片数据。

渲染上屏/交换缓冲区渲染缓冲区一般映射的系统资源比如窗口。iOS为双缓冲机制,显示在屏幕上的为屏幕缓冲区,另一个为离屏缓冲区。在一个缓冲区渲染完成之后,将两个缓冲区交换来实现图像显示。

你可能感兴趣的:(OpenGL初探)