美文网首页
Open GL渲染流程

Open GL渲染流程

作者: 小强_123 | 来源:发表于2019-06-04 22:39 被阅读0次

    渲染管线(rendering pipeline):将数据转化为渲染图像的过程,下图为管线步骤

    编写Open GL程序需要关注的是顶点着色器和片元着色器,需要使用GLSL手动编写具体操作,其他为系统流程,程序员无需关心具体操作步骤。

    顶点着色器(Vertex shader):根据输入的数据,使用相关的数学运算来计算光照效果、位移、颜色值等。每个顶点并发计算一次。

    片元着色器(Fragment shader):计算每个片元最终显示在屏幕上的颜色和颜色深度值。使用纹理映射的方式,对顶点处理阶段计算的颜色值进行补充。如果我们觉得不应该显示某个片元,还可以直接终止这个片元的处理,这一步叫做片元的丢弃(discard).

    顶点着色器决定了某个图元显示在屏幕的什么位置,片元着色器决定了某个片元应该显示什么颜色。

    管线流程如下,此处借鉴自凡几多同学的Open GL基础渲染

    由右上角的标识可知,上部分为客户端,下部分为服务端,根据Open GL的定义,客户端数据存储在cpu存储器中,驱动程序将渲染命令与数据组合起来发给服务端操作。服务端数据存储在GPU存储器中,由GPU并发执行计算与渲染。

    客户端与服务端功能上是异步的,通过数据缓冲区进行数据传递,客户端不断的将数据和命令组合送入缓冲区,缓冲区再发到服务端执行。

    属性:就是对每一个顶点都要作改变的数据元素。实际上,顶点位置本身就是一个属性。属性值可以是浮点数、整数、布尔数据。属性总是以四维向量的形式进行内部存储的,属性可以表示纹理坐标、颜色值、关照计算表面法线。

    Uniform:属性是一种对整个批次属性都取统一值的单一值。它是不变的。通过设置uniform变量就紧接着发送一个图元批次命令,Uniform变量实际上可以无数次限制地使用,设置一个应用于整个表面的单个颜色值,还可以设置一个时间值。在每次渲染某种类型的顶点动画时修改它。

    注意:这里的uniform 变量每个批次改变一次,而不是每个顶点改变一次。

    uniform变量最常见的应用是在顶点渲染中设置变换矩阵

    与属性相同点:可以是浮点值、整数、布尔值

    与属性不同点:顶点着色器和片元着色器都可以使用uniform变量。uniform 变量还可以是标量类型、矢量类型、uniform矩阵。

    纹理:不仅仅表现在图形,很多图形文件格式都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的顶点着色器与片元着色器都可以对纹理数据进行采样和筛选。

    典型的应用场景:片段着色器对一个纹理值进行采样,然后在一个三角形表面应用渲染纹理数据。

    相关文章

      网友评论

          本文标题:Open GL渲染流程

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