图形图像 opencv gles

快速理解OpenGL专业名词

2019-05-13  本文已影响0人  Hanfank

快速理解OpenGL专业名词

OpenGL是做什么的

OpenGL

OpenGL(英语:Open Graphics Library,译名:开放图形库或者“开放式图形库”)是用于渲染2D、3D矢量图形语言、跨平台的应用程序编程接口(API)。这个接口由近350个不同的函数调用组成,用来从简单的图形比特绘制复杂的三维景象。OpenGL常用于CAD、虚拟现实、科学可视化程序和电子游戏开发。

其他图形库:

什么是GPU 图形渲染流水线(Pipeline)

image.png

程序按照固定的顺序执行,且不能更改顺序,称为管线,这个翻译非常不友好,不好理解,容易有歧义,叫流程流水线更好。
GPU 图形渲染流水线的具体实现可分为六个阶段,如下图所示。

第一阶段:顶点着色器。该阶段的输入是 顶点数据(Vertex Data) 数据,比如以数组的形式传递 3 个 3D 坐标用来表示一个三角形。顶点数据是一系列顶点的集合。

第二阶段:图元生成。该阶段将顶点着色器输出的所有顶点作为输入,并将所有的点装配成指定图元的形状。图中则是一个三角形。图元(Primitive) 用于表示如何渲染顶点数据,如:点、线、三角形。

第三阶段:几何着色器。该 新顶点构造出新的(或是其它的)图元来生成其他形状。例子中,它生成了另一个三角形。

第四阶段:光栅化。该阶段会把图元映射为最终屏幕上相应的像素,生成片段。片段(Fragment) 是渲染一个像素所需要的所有数据。

第五阶段:片段着色器。该阶段首先会对输入的片段进行 裁切(Clipping)。裁切会丢弃超出视图以外的所有像素,用来提升执行效率。

第六阶段:测试与混合。该阶段会检测片段的对应的深度值(z 坐标),判断这个像素位于其它物体的前面还是后面,决定是否应该丢弃。此外,该阶段还会检查 alpha 值( alpha 值定义了一个物体的透明度),从而对物体进行混合。因此,即使在片段着色器中计算出来了一个像素输出的颜色,在渲染多个三角形的时候最后的像素颜色也可能完全不同。

最后阶段,帧缓冲区(未在图中标明)。是由像素组成的二维数组,每一个存储单元对应屏幕上的一个像素,整个帧缓冲对应一帧图像即当前屏幕画面。帧缓冲通常包括:颜色缓冲,深度缓冲,模板缓冲和累积缓冲。这些缓冲区可能是在一块内存区域,也可能单独分开。

什么是着色器(Shader)

着色器

想象一下给方块上色,画阴影,画线条。上色、画图的这个工具叫着色器。在OpenGL中的着色器可以着很多东西,比如这三个

什么是光栅化

image.png

光栅化就是根据所有顶点的位置,计算和确定需要多少个像素才能构成这个图形,这个图非常贴切。顶点下方的方块即是计算出来的像素点。

什么是纹理

纹理,简单的理解就是一副图像。而把一副图像映射到图形上的过程,叫做纹理映射。

什么是混合

在OpenGL中,物体透明技术通常被叫做混合(Blending)。透明是物体的混合色,这种颜色来自于不同浓度的自身颜色和它后面的物体颜色。

什么是OpenGL上下文(Rendering Context)

上下文

如何理解“上下文”:比如在一篇文章中,我们看到一句话:“他飞快的跑了出去。”但是如果我们不看上下文的话,我们并不知道这句话究竟是什么意思:谁跑了出去?他是谁?他为什么要跑? 写计算机理解的程序语言跟写文章是相似的,我们运行任何一段语句都需要有这样一个“上下文”的存在。
从另外一个角度去想,“他飞快的跑了出去。”这句话也属于文中内容,所以它也属于“上下文”。
而上下文在书中仅有一份,我们可以把它做成状态机,小说的任何一个部分的内容都可称为状态。

什么是渲染(Rendering)

image.png

将图像数据转换成3D图像的操作叫做渲染

什么是矩阵、变换矩阵、投影矩阵

首先要明白什么是矩阵,然后要明白矩阵的变换,之后就会明白什么是投影矩阵。

A:1,0,5
B:0,-1,2
C:0,0,1

矩阵变换即是矩阵和矩阵的计算,比如加减乘除等。计算结果后得到一个新的矩阵。

实际上是将要绘制的对象带入到了不同的坐标系中。我们注意到有这样几个坐标系:

更加形象的过程,如下图所示:

坐标变换流程

什么是渲染上屏/交换缓冲区

image.png

常规的OpenGL程序⾄至少都会有两个缓冲区。显示在屏幕上的称为屏幕缓冲区,没有显示的称为离屏缓冲区。在⼀一个缓冲区渲染完成之后,通过将屏幕缓冲区和离屏缓冲区交换,实现图像在屏幕上的显示。

什么是GLSL

GLSL - OpenGL Shading Language 也称作 GLslang,是一个以C语言为基础的高阶着色语言。它是由 OpenGL ARB所建立,提供开发者对绘图管线更多的直接控制,而无需使用汇编语言或硬件规格语言。

void main(void){
    gl_Position = ftransform();
}
void main(void){
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

什么是OpenGL状态机

程序跑起来后需要去修改、设置、添加各种不同的状态,使图像按照我们的想法显示出来。状态机中保存了对象的生命周期、响应事件、状态事件等等

文献:
计算机那些事(8)——图形图像渲染原/
Shader | 着色器知多少 | 片段(像素)着色器、顶点着色器、几何着色器
OpenGL ES---矩阵变换
OpenGL图形渲染管线图解

上一篇下一篇

猜你喜欢

热点阅读