OpenGL初识1.0

一、OpenGL

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API)。

能用来绘制从简单的图形到复杂的三维图形。OpenGL 将计算机资源抽象为一个个OpenGL对象,对这些资源的操作抽象为一个个OpenGL指令。Open GL不创建视图(View),Mac OS中用GLKit框架来使用它。

OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。本质是操作GPU芯片来进行图形图像的高效渲染。

用途:

1.音视频处理:数据解码后的渲染
2.地图引擎:地图数据渲染
3.动画:动画的绘制
4.视频处理:添加滤镜

二、OpenGL ES

OpenGL ES (OpenGL for Embedded system)是Open G L三维图形API的子集,针对手机,PDA(手持终端)和游戏主机等嵌入式设备设计的,去除了一些不要的和性能较低的API接口。

DirectX是由许多API组成的,在Windows平台下不单单是图形处理API,多媒体处理框架,不跨平台,性质可分为四个模块:显示,声音,输入,网络部分。

三、Metal

Apple为游戏开发者推出了新的平台技术Metal框架,为3D图像提高了10倍的渲染性能。

四、OpenGL上下文:context

在应⽤用程序调⽤用任何OpenGL的指令之前,需先创建个OpenGL的上下⽂。这个上下⽂是一个非常庞大的状态机,保存了OpenGL中的各种状态,上下文是OpenGL指令执行的基础。

OpenGL的函数不管是在哪个语言中,都是类似C语言一样的面相过程的。本质上都是对OpenGL上下文这个庞大的状态机中的某个状态或者对象进行操作。通过对OpenGL的指令的封装,是可以将OpenGL的相关调用封装成为一个面向对象的图形API。

由于Open GL 上下文是一个巨大的状态机,切换上下文会产生较大的开销。不同的绘制模块可能需要使用完全独立的状态管理,因此可以在应用程序中分别创建多个不同的上下文,在不同的线程中使用不同的上下文,上下文之间共享纹理,缓冲区等资源。这样的方案会比反复切换上下文,大量修改渲染状态,更加合理高效。

五、OpenGL状态机

状态机描述了一个对象在具有生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件以及转变中所执行的活动,或者说状态机是一种行为,说明对象在其生命周期中响应事件所经历的状态序列以及对那些状态事件的响应。
特点:
1.有记忆功能,能记住当前的状态(当前使用的颜色,是否开启了颜色混合)
2.可以接收输入,根据输入的内容和自己原先的状态,修改自己当前的状态,并且有 对应输出
3.当进入特殊状态的时候,不再接收接口输入,停止工作

六、渲染:Rendering

将图形/图像数据转换成3D空间图像展示在屏幕上叫做渲染
顶点渲染:用于渲染出形状
像素渲染:在形状中填充色彩

七 缓冲区

画图先画好骨架,然后再往骨架里面填充颜色,对于Open GL也一样,顶点数据类似于骨架,和现实中不同的是,OpenGL中的图像都是由图元组成,在OpenGLES 中有三种图元,点,线,三角形。
开发这可以选择设定函数指针,在调用到绘制方法时候,直接由内存传入顶点数据。也就是说这部分数据值钱是存在于内存当中,被称为顶点数组。VertexArray
而性能更高的做法是提前分配一块儿显存,将顶点数据预先传入到显存当中,这部分的显存就叫做顶点缓冲区。

八、管线 Graphics Pipeline

渲染管线又称渲染流水线,它是图形图像从数据一步一步形成最终输出的画面的过程。

固定管线: 已经封装好了的一个图形渲染流程工具流水线,只需要传递相关参数就可以实现.

可编程管线: 当固定管线不够实际开发中使用时,OpenGL将2个着色器可以开发者借助于GLSL语言自己编程叫可编程管线.

这两个着色器分别是顶点着色器和片元着色器;

顶点着色器: 处理顶点的变换.例如平移.旋转等;

片元着色器: 处理光栅化后的像素点的颜色值.

九、光栅化Rasterize/Rasterization

光栅化(像素化)是把已有的顶点数据转化为片元的过程,转化为像素点。

十、纹理

纹理:理解为图片

十一、blend混合

一个像素点的颜色叠加,通过各种矩阵和已有公式变换出的结果。

十二、变换矩阵 Transformation

旋转或者平移视图位置

十三、投影 Projection

用于将3D坐标转换成二维屏幕坐标,实际线条也将再二维里面绘制

perspective projection P 正投影

orthographic projection o 透视投影

十四、交换缓冲区 swapbuffer

缓冲区存储需要渲染的数据内容,渲染完了一个像素之后,就从缓冲区取出下一个来渲染

文档参考来源:

https://www.jianshu.com/p/a7096a6c16a7

https://www.jianshu.com/p/c0e71b4c1bf4

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