在任何时候,学习一个新的知识都要先从他的专业名词开始,例如学习C语言 要知道函数 要知道指针,学习OC 要知道方法 要知道属性。那么 学习OpenGL 也要知道他的一些专业名词,不过分吧!老铁们!
声明:此文章参照简述作者凡几多,不是冒犯,大佬见谅
1.上下文(context)
在应⽤用程序调⽤用任何OpenGL的指令之前,需要安排⾸首先创建⼀一个OpenGL的 上下⽂文。这个上下⽂文是⼀一个⾮非常庞⼤大的状态机,保存了了OpenGL中的各种状 态,这也是OpenGL指令执⾏行行的基础
OpenGL的函数不不管在哪个语⾔言中,都是类似C语⾔言⼀一样的⾯面向过程的函 数,本质上都是对OpenGL上下⽂文这个庞⼤大的状态机中的某个状态或者对象 进⾏行行操作,当然你得⾸首先把这个对象设置为当前对象。因此,通过对OpenGL指令的封装,是可以将OpenGL的相关调⽤用封装成为⼀一个⾯面向对象的 图形API的
由于OpenGL上下⽂文是⼀一个巨⼤大的状态机,切换上下⽂文往往会产⽣生较⼤大的开 销,但是不不同的绘制模块,可能需要使⽤用完全独⽴立的状态管理理。因此,可 以在应⽤用程序中分别创建多个不不同的上下⽂文,在不不同线程中使⽤用不不同的上 下⽂文,上下⽂文之间共享纹理理、缓冲区等资源。这样的⽅方案,会⽐比反复切换 上下⽂文,或者⼤大量量修改渲染状态,更更加合理理⾼高效的.
2.openGL 状态机
状态机是理理论上的⼀一种机器器.这个⾮非常难以理理解.所以我们把这个状态机这么理解.状态机描述了了⼀一个对象在其⽣生命周期内所经历的各种状态,状态间的 转变,发⽣生转变的动因,条件及转变中所执⾏行行的活动。或者说,状态机是 ⼀一种⾏行行为,说明对象在其⽣生命周期中响应事件所经历的状态序列列以及对那 些状态事件的响应。因此具有以下特点
1有记忆功能,能记住其当前的状态
2可以接收输⼊入,根据输⼊入的内容和⾃自⼰己的原先状态,修改⾃自⼰己当前状 态,并且可以有对应输出。
3当进⼊入特殊状态(停机状态)的时候,变不不再接收输⼊入,停⽌止⼯工作;
类推到OpenGL 中来,可以这么理理解:
OpenGL可以记录⾃自⼰己的状态(如当前所使⽤用的颜 色、是否开启了了混合 功能等)
OpenGL可以接收输⼊入(当调⽤用OpenGL函数的时候,实际上可以看成 OpenGL在接收我们的输入),如我们调⽤用glColor3f,则OpenGL接收到 这个输入后会修改⾃自⼰己的“当前颜⾊色”这个状态;
OpenGL可以进入停止状态,不不再接收输入。在程序退出前,OpenGL总 会先停⽌工作的;
3.渲染(Rendering)
渲染的意思是什么呢? 这里我特意去了百度百科。
将图形/图像数据转换成3D空间图像操作叫做渲染。
4.定点数组(VertexArray)
这里以绘图为例,年幼的我有幸在幼儿园学到了一节绘画课,老师讲,绘画需要先画骨架,那么这个定点数据就是骨架,它相当于一个几何图形的骨架 。不过 OpenGL 中所有的图像都是由图元组成的,图元包括 点,线,三角形。
5,定点缓冲区(VertexBuffer)。
存储定点数据的那块内存称之为定点缓冲区。
6.管线 :在OpenGL下渲染图形,就会经历一个一个的节点,而这个操作就称之为管线 管线是一个抽象的概念,之所以称之为管线是因为显卡在处理数据的时候是按照一个固定的顺序来的,而且是严格按照这个顺序,
7.着色器程序(shader)
将固定渲染管线的架构变成了可编程的渲染管线 常见的着色器主要有 定点着色器,片元着色器,几何着色器 曲面细分着色器 OpenGL ES 3.0 也是只支持 定点着色器 和 片元着色器
定点着色器VertexShader ----- 一般⽤来处理图形每个顶点变换(旋转/平移/投影等)
片元着⾊色器程序 FragmentShader 一般用来处理像素颜色的计算和填充
8光栅化Rasterization
就是把定点数据转换成片元的过程,具有将图转换成一个一个像素的图像的作用,特点是每个元素对应的帧缓冲区中的像素。
简而言之就是把定点数据转换成片元的过程,理解为给三个点,然后让这三个点连成一个三角形,让后在填充到这三角形内的每一个像素。
9.纹理
纹理可以理解为图片,渲染图形时,需要在其编码填充图片,使得场景更加的逼真,而使用的图片在OpenGL 里面称之为纹理
10.混合。
在OC中 view_A 的颜色是RGBA(x.x.x.0.5)view_B 的颜色是RGBA(x.x.x.0.5)那么A 和 B 的重叠就叫混合,因手残 无法画出图片,望见谅
简单看下吧,就是这个意思 C 就是混合出来的
11.变换矩阵(Transformation)----- > 和OC 好像???
例如图形想发生平移,缩放,旋转变换.就需要使用变换矩阵.
12.投影矩阵(Projection)
⽤于将3D坐标转换为二维屏幕坐标,实际线条也将在二维坐标下进行绘制
另我的文章写的不怎么地,但是我找到一个好的 在这里 比我写的好 。
网友评论