美文网首页OpenGL
第四节—OpenGL渲染流程

第四节—OpenGL渲染流程

作者: L_Ares | 来源:发表于2020-04-30 10:30 被阅读0次

    本文为L_Ares个人写作,包括图片皆为个人亲自操作,以任何形式转载请表明原文出处。

    一、OpenGL渲染流程架构图解析

    首先,明确一下OpenGL的渲染流程是一个怎样的管线。如下图:

    着色器的渲染流程.png

    这其中包含了数据的传入,那么数据是通过什么通道传输到什么端,不同端又带有怎样的特性,会进行什么样的处理,这就是下图显示的OpenGL渲染流程架构图阐述的。如图:

    OpenGL渲染流程架构图.png

    图中的 (1)TextureData (2)Uniforms (3)Attributes 只是传递数据的通道。
    下面逐一的介绍这三个通道的作用和特点。

    1. Attributes

    利用Attributes通道的数据只能传递到VertexShader,也就是顶点着色器,是通过GLSL代码的方式间接的传递。

    经常要发生改变的值通常使用Attributes通道来进行传递。

    例如:顶点坐标、颜色、位移、纹理坐标、光照法线等。

    数据类型上面,可以是int、bool、float,也可以是四维向量等等。

    总结:就是不断发生改变的数据通常走这条通道。

    2. Uniforms

    利用Uniforms通道的数据可以传递到VertexShader和FragmentShader,也就是顶点着色器和片元着色器。

    与Attributes相反,通过Uniforms通道进行传递的数据都是比较稳定的,比较有统一,有制式的,不会经常的发生改变。

    我们拿旋转来举一个例子。

    例1:首先要明确,当一个图形发生旋转,也就是让图形的每个顶点都乘以一个旋转矩阵,即:顶点 * 旋转矩阵 。这个过程发生在VertexShader中,那么在Uniforms在Fragment中的例子是什么样子的呢?

    例2:在Fragment中,利用Uniforms通道传递数据有很常见的例子,比如视频。

    视频渲染到屏幕上的大体流程如下:

    视频--->经过解码--->变成一帧一帧的图片--->利用OpenGL/ES或Metal渲染--->显示

    视频本身的颜色排列方式是YUV方式,但是想要显示在屏幕上,就需要使用RGBA的颜色排列方式,我们就需要将YUV的颜色值转换成RGBA的颜色值:YUV * 颜色转换矩阵 = RGBA

    那么在上述的例1与例2中,两个转换的矩阵,旋转矩阵和颜色转换矩阵就可以通过Uniforms通道进行传递。

    总结:就是不怎么需要发生改变的数据通常走这条通道。

    3. TextureData

    TextureData可以传输到VertexShader中,但是这种方式极为的不常用,而且这是通过间接传递完成的,必要性不大。

    TextureData通道主要还是纹理传递通道,传输的另一端是FragmentShader。

    我们都知道图片就是一种纹理,下面我拿图片来举例。

    例3:比如做滤镜的时候,需要利用纹理数据对图片的本身进行处理,而且滤镜改变的仅是图片本身的颜色值。

    例4:渲染图形。比如填充线框/颜色/纹理。这个过程可以使用多张纹理,获取它们的颜色,然后完成填充。

    图中的Outs(输出)Primitive Assembly(图元装配/光栅化)是OpenGL开发者没有办法直接参与或者干预的过程,不再多做解释。

    那么在这个流程架构图中,其实OpenGL开发者可以干预到的就只是VertexShader和FragmentShader。

    二、OpenGL可以实现跨平台的原因

    从流程中也可以看出,OpenGL只负责把数据传输到显示层,具体谁来显示,并没有明确的交代,而且OpenGL也没有提供窗口系统。这就是OpenGL可以实现跨平台的原因。

    三、Client和Server的区别

    在图中已经有标明,Client是我们利用代码获取或者预置数据的编写区域,还是API调用区域,主要调用的是CPU进行代码的处理。

    Server则是利用GPU进行数据传递和渲染的区域。

    如下图:

    OpenGL渲染流程执行位置.png

    至此,本节关于OpenGL渲染流程架构图的知识点归纳完毕。

    相关文章

      网友评论

        本文标题:第四节—OpenGL渲染流程

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