美文网首页
OpenGL的基础简介——笔记1

OpenGL的基础简介——笔记1

作者: 凯司机 | 来源:发表于2021-05-25 20:54 被阅读0次

推荐两本书:《OpenGL超级宝典》特别适合零基础的人员学习、《OpenGL编程指南》这本书相对比较难。

图形API的简介:

OpenGL(Open Graphics Library) 是一个跨编程语言、跨平台的编程图形程序接口,它将计算机的资源抽象称为一个个OpenGL的对象,对这些资源的操作对象为一个个的OpenGL指令。(跨平台性、API只操作GPU芯片)(面向过程的一个编程语言)

OpenGL ES (OpenGL for Embedded Systems) 是OpenGL三维图形API的子集,针对手机、PDA和游戏主机等嵌入式设备而设计,去除了许多不必要和性能较低的API接口。

DirectX 是由很多API组成的,DirectX并不是一个单纯的图形API,最重要的是DirectX是属于Windows上一个多媒体处理框架,并不支持Windows以外的平台。不是跨平台框架。按照性质分类,可以分为四大部分,显示部分、声音部分、输入部分和网络部分。

Metal: Metal: Apple为游戏开发者推出了新的平台技术Metal,该技术能够为3D图像提高10倍的渲染性能。Metal是Apple为了解决3D渲染而推出的框架。(苹果底层渲染是由Metal来实现的、cocos2D是由OpenGL ES)

注意事项:iOS开发者需要学习OpenGL、OpenGLES嘛?

  1. 苹果从OpenGL ES到Metal用了将近4年的时间;
  2. 苹果使用Metal渲染也只是在核心动画中;
  3. 目前的实际项目开发不可能完全用Metal来替代。
  4. 从实际的项目出发,你不可能跨跃性飞升,只能一步步的来了。

图形API能解决什么问题:

    简单来说就是实现图形的底层渲染

    比如在游戏开发中,对于游戏场景/游戏人物的渲染,(一般咱们是不需要做的)

    比如在音视频开发中,对于视频解码后的数据渲染,

    比如在地图引擎,对于地图上的数据渲染,

    比如在动画中,实现动画的绘制,

    比如在视频处理中,对于视频加上滤镜效果。

OpenGL/OpenGL ES/Metal 在任何项目中解决问题的本质就是利用GPU芯片来高效渲染图形图像。

图形API是iOS开发者唯一接近GPU的方式。

OpenGL专业名词解析:

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

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

由于OpenGL上下文是一个巨大的状态机,切换上下文往往会产生较大的开销,但是不同的绘制模块,可能需要使用完全独立的状态管理理。因此,可以在应用程序中分别创建多个不同的上下文,在不同线程中使用不同的上下文,上下文之间共享纹理、缓冲区等资源。这样的方案,会比反复切换上下文,或者大量修改演染状态,更加合理高效的。
OpenGL状态机:
        状态机可以抽象为理论上的一种机器,这种机器可以描述一个对象在其生命周期内所经历的各种状态,状态间的转变,发生转变的动因,条件及转变中所执行的活动。或者说,状态机是一种行为,说明对象在其生命周期中响应事件所经历的状态序列以及对那些状态事件的响应。因此具有以下特点:有记忆功能 / 可以接受输入,根据输入的内容和自己的原先状态,修改自己当前状态,并且可以有对应输出。/ 当进入特殊状态 (停机状态)的时候,便不再接受输入,停止工作。

        类推到OpenGL上来,就可以这样理解: OpenGL可以记录自己的状态(如当前所使用的颜色、是否开启了混合功能等)/ OpenGL可以接受输入(当调用OpenGL函数的时候,实际上可以堪称OpenGL在接受我们的输入),如我们调用glColor3l,则OpenGL接收到这个输入后会修改自己的"当前颜色"这个状态;/     OpenGL可以进入停滞状态,不再接受输入。在程序退出前,OpenGL总会先停止工作的。
渲染:
将图形/图像数据转换成3D空间图像操作叫做渲染[Rendering].

顶点数组(VertexArray)和顶点缓冲区(VertexBuffer)

画图一般是先画好图像的骨架,然后再往骨架里面填充颜色,这对于 OpenGL也是一样的。顶点数据就是要画的图像的骨架,和现实中不同的是,OpenGL中的图像都是由图元组成。在OpenGL ES中,有3种类型的图元:点、线、三角形.那这些顶点数据最终是存储在哪里的呢?开发者可以选择设定函数指针,在调用绘制方法的时候,直接由内存传入顶点数据,也就是说这部分数据之前是存储在内存当中的,被称为顶点数组。而性能更高的做法是,提前分配一块显存,将顶点数据预先传入到显存当中。这部分的显存,就被称为顶点缓冲区。

顶点指的是我们在绘制一个图形时,它的顶点位置数据.而这个数据可以直接 存储在数组中或者将其缓存到GPU内存中。

管线: 在OpenGL下渲染图形, 就会有经历一个一个节点。而这样的操作可以理解管线。可以想象成流水线.每个任务类似流水线般执行.任务之间有先后顺序。管线是一个抽象的概念,之所以称之为管线是因为显卡在处理数据的时候是按照 一个固定的顺序来的,而且严格按照这个顺序.就像水从一根管子的一端流到另一端,这个顺序是不能打破的。

固定管线/存储着色器:

在早期的OpenGL版本,它封装了很多种着色器程序块内置的一段包含了光照、坐标变换、裁剪等等诸多功能的固定shader程序来完成,来帮助开发者来完成图形的渲染。而开发者只需要传入相应的参数,就能快速完成图形的渲染。类似于iOS开发会封装很多API而我们只需要调用,就可以实现功能。不需要关注底层实现原理

但是由于OpenGL的使用场景非常丰富,固定管线或存储着色器无法完成每一个业务。这时将相关部分开放成可编程。

管线就是这个过程、这个顺序就是渲染流程。

可编程管线:可以简单理解为可以自定义的管线、shader。(个人理解)

相关文章

网友评论

      本文标题:OpenGL的基础简介——笔记1

      本文链接:https://www.haomeiwen.com/subject/qfgcsltx.html