OpenGL|OpenGL 渲染管线流程解析
说到渲染流程,我们可以用一张图,清楚的看到渲染的一系列流程。废话不说,看图(图片取自Tobesky的一篇文章)
文章图片
渲染管线流程
这样图非常重要,处理任何图形渲染,都需要依据这张图的流程。下面我们来细细说明这张图表达的意思。
【OpenGL|OpenGL 渲染管线流程解析】
客户端/ 服务端
Client(客户端)/ Server(服务端。在我们日常开发中手机端称为客户端,后台称为服务端。在这里是要区分开来的。图中虚线分为上下两部分,上半部分是客户端,下半部分为服务端。
客户端
是存储在CPU存储器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行(我们写的代码,OpenGL 提供的API就是在客户端执行)
服务端
驱动程序会将渲染命令和数组组合起来,发送给服务器执行。(在一台典型的个人计算机上,服务器就是实际上就是图形加速卡上的硬件和内存)
着色器
顶点着色器(Vertex Shader)和 Fragment Shader(片元着色器)和图元装配(primitive Assembly)
- 着色器是使用GLSL编写的程序
- 顶点着色器计算顶点数据在交由图元装配对每个片段进行光栅化,最后片元着色器会输出我们将屏幕上看到的最终颜色值。
2.uniform 值
3.纹理
属性
- 对
每一个顶点
都要作改变的数据元素 - 属性值可以是
浮点数、整数、布尔数据
- 属性还可以是:
纹理坐标、颜色值、关照计算表面法线
-
属性只提供给顶点着色器使用
,对于片元着色器木有太大意义 - 属性可以通过顶点着色器,间接传递给片元着色器
- uniform变量可以
无数次
地使用 - uniform 变量
每个批次
改变一次,而不是每个顶点改变一次 - uniform变量最常见的应用是在顶点渲染中设置
变换矩阵
- 与属性相同点:可以是
浮点值、整数、布尔值
- 与属性不同点:顶点着色器和片元着色器都可以使用uniform变量。uniform 变量还可以是
标量类型、矢量类型、uniform矩阵
- 在顶点着色器、片段着色器中都可以对纹理数据进行采样和筛选
- 典型的应用场景:片元着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据
- 纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的
输出(out)
;输出数据是作为一个阶段着色器的输出定义的,二后续阶段的着色器则作为输入定义。- 输出数据可以简单的从一个阶段传递到下一个阶段,也可以用不同的方式插入。
- 客户端的代码接触不到,这些内部变量OpenGL开发暂时接触不到。
推荐阅读
- 你也许不知道的Vuejs|你也许不知道的Vuejs - 花式渲染目标元素
- 2.关于OpenGL|2.关于OpenGL 坐标系以及渲染流程
- 光栅化|光栅化,着色器,渲染管线的理解
- 音视频开发|音视频开发 三(渲染图片纹理)
- OpenGL|OpenGL ES之LUT(滤镜基准图)
- vue的SEO优化方法一(prerender-spa-plugin预渲染)
- OpenGL|OpenGL 绘制甜甜圈深度测试、多边形偏移、裁剪、 混合
- FFmpeg|FFmpeg 开发(07)(FFmpeg + OpenGLES 实现 3D 全景播放器)
- Metal|Metal 案例03(大批量顶点数据的图形渲染)
- 小怪兽~Corona灯光+材质小结#一味学吧Corona写实渲染#