快速理解OpenGL专业名词

快速理解OpenGL专业名词

OpenGL是做什么的

OpenGL

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

其他图形库:

  • OpenGL ES (OpenGL for Embedded Systems):OpenGL进行修改,为嵌入式设备而设计的另一套库
  • DirectX:属于Windows系统的一套多媒体处理库,包含四大部分:显示部分、声⾳音部分、输⼊部分和网络部分
  • Metal: Apple为游戏开发者推出了了新的平台技术Metal,该技术能够为3D 图像提⾼高10 倍的渲染性能.MetalApple为了了解决3D渲染⽽而推出的框架

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

image.png

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

  • 顶点着色器(Vertex Shader)
  • 形状装配(Shape Assembly),又称 图元装配
  • 几何着色器(Geometry Shader)
  • 光栅化(Rasterization)
  • 片段着色器(Fragment Shader),又称 片元着色器
  • 测试与混合(Tests and Blending)
  • 帧缓冲区(Framebuffer)

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

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

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

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

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

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

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

什么是着色器(Shader)

着色器

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

  • 二维着色器
    二维着色器处理的是数字图像,也叫纹理,着色器可以修改它们的像素。
  • 像素着色器
    像素着色器(英语:pixel shader)也叫片段着色器(英语:fragment shader),用于计算“片段”的颜色和其它属性,此处的“片段”通常是指单独的像素。最简单的像素着色器只有输出颜色值;复杂的像素着色器可以有多个输入输出。像素着色器既可以永远输出同一个颜色,也可以考虑光照、做凹凸贴图、生成阴影和高光,还可以实现半透明等效果。像素着色器还可以修改片段的深度,也可以为多个渲染目标输出多个颜色。
    像素着色器还可以处理管线中间过程中的任何二维图像,包括精灵和纹理。因此,如果需要在栅格化后进行后期处理,像素着色器是唯一选择。
  • 三维着色器
    三维着色器处理的是三维模型或者其它几何体,可以访问用来绘制模型的颜色和纹理。下面几种都属于三维着色器
    顶点着色器
    顶点着色器是最早的三维着色器,顶点着色器处理每一个顶点,将顶点坐标投影在屏幕上,即计算顶点的二维坐标,同时还可以计算深度坐标。
    几何着色器
    几何着色器可以在着色器中生成新的顶点;
    细分曲面着色器
    细分曲面着色器(英语:tessellation shader)则可以向一组顶点中添加细节。这些着色器都会被安排在流水线(管线)中的。

什么是光栅化

image.png

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

什么是纹理

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

什么是混合

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

什么是OpenGL上下文(Rendering Context)

上下文

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

什么是渲染(Rendering)

image.png

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

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

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

  • 矩阵
    下图就是矩阵,是初中二年级学的内容,图中包含三个坐标xyz。
    image.png
A:1,0,5
B:0,-1,2
C:0,0,1
  • 矩阵变换
    image.png

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

  • 投影矩阵
    也就是很多矩阵在一起被计算成投影到屏幕的坐标。

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

  • 模型坐标系:主要用以定义描述绘制对象;
  • 世界坐标系:将要绘制的对象放置到世界坐标系中。所有的绘制对象需要一个共同的坐标系来决定对象之间的相对位置。正如一个杯子的坐标,只是用来描述杯子本身的形体,我们还需要把它们放到世界空间中,在它的旁边,可能还有茶壶、桌子等等。
  • 视坐标:也叫照相机坐标系,你可以想象我们在那个方向、那个位置放置了一个照相机,也可以说,那是我们眼睛的位置。
  • 裁剪坐标系:将区域进行裁剪,有些东西可能在视线之外,就需要裁掉;
  • 归一化坐标系:OpenGL 认为它所绘制的区域是一个正方形,每个方向上范围在[-1,1]之间。
  • 屏幕坐标系:或者说是窗口坐标系,就是将归一化坐标系投射到实际屏幕上。

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

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

image.png

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

什么是GLSL

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

  • GLSL 顶点着色器的简单范例
void main(void){
    gl_Position = ftransform();
}
  • GLSL 片断着色器的简单范例
void main(void){
    gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}

什么是OpenGL状态机

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,968评论 6 482
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,601评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 153,220评论 0 344
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,416评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,425评论 5 374
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,144评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,432评论 3 401
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,088评论 0 261
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,586评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,028评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,137评论 1 334
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,783评论 4 324
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,343评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,333评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,559评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,595评论 2 355
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,901评论 2 345

推荐阅读更多精彩内容