美文网首页OpenGL
OpenGL 渲染管线流程解析

OpenGL 渲染管线流程解析

作者: 寻常_0 | 来源:发表于2019-05-15 14:14 被阅读0次

    说到渲染流程,我们可以用一张图,清楚的看到渲染的一系列流程。废话不说,看图(图片取自Tobesky的一篇文章)

    渲染管线流程
    这样图非常重要,处理任何图形渲染,都需要依据这张图的流程。下面我们来细细说明这张图表达的意思。
    客户端/ 服务端

    Client(客户端)/ Server(服务端。在我们日常开发中手机端称为客户端,后台称为服务端。在这里是要区分开来的。图中虚线分为上下两部分,上半部分是客户端,下半部分为服务端。
    客户端是存储在CPU存储器中的,并且在应用程序中执行,或者在主系统内存的驱动程序中执行(我们写的代码,OpenGL 提供的API就是在客户端执行)
    服务端驱动程序会将渲染命令和数组组合起来,发送给服务器执行。(在一台典型的个人计算机上,服务器就是实际上就是图形加速卡上的硬件和内存)

    着色器

    顶点着色器(Vertex Shader)和 Fragment Shader(片元着色器)和图元装配(primitive Assembly)

    • 着色器是使用GLSL编写的程序
    • 顶点着色器计算顶点数据在交由图元装配对每个片段进行光栅化,最后片元着色器会输出我们将屏幕上看到的最终颜色值。
    3种向OpenGL 着色器传递渲染数据的方法

    1.属性
    2.uniform 值
    3.纹理

    属性
    • 每一个顶点都要作改变的数据元素
    • 属性值可以是浮点数、整数、布尔数据
    • 属性还可以是:纹理坐标、颜色值、关照计算表面法线
    • 属性只提供给顶点着色器使用,对于片元着色器木有太大意义
    • 属性可以通过顶点着色器,间接传递给片元着色器
    Uniform值
    • uniform变量可以无数次地使用
    • uniform 变量每个批次改变一次,而不是每个顶点改变一次
    • uniform变量最常见的应用是在顶点渲染中设置变换矩阵
    • 与属性相同点:可以是浮点值、整数、布尔值
    • 与属性不同点:顶点着色器和片元着色器都可以使用uniform变量。uniform 变量还可以是标量类型、矢量类型、uniform矩阵
    纹理
    • 在顶点着色器、片段着色器中都可以对纹理数据进行采样和筛选
    • 典型的应用场景:片元着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据
    • 纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的
    输出

    在图表中第四种数据类型是输出(out);输出数据是作为一个阶段着色器的输出定义的,二后续阶段的着色器则作为输入定义。

    • 输出数据可以简单的从一个阶段传递到下一个阶段,也可以用不同的方式插入。
    • 客户端的代码接触不到,这些内部变量OpenGL开发暂时接触不到。

    相关文章

      网友评论

        本文标题:OpenGL 渲染管线流程解析

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