美文网首页
OpenGL渲染管线简单介绍

OpenGL渲染管线简单介绍

作者: hie | 来源:发表于2018-12-02 13:53 被阅读0次
    OpenGL 渲染管线简化版本

    上图中,通过调用OpenGL API把我们所编写的代码通过Texture Data、Uniforms、attributes三种方式,传递给顶点着色器、片元着色器,通过光栅化,最终渲染成目标图形。

    OpenGL有三种方法可以向着色器传递数据:属性、uniform 值、纹理

    1、属性(Attributes):

    就是对每一个顶点都要作改变的数据元素。实际上,顶点位置本身 就是⼀个属性。属性值可以是浮点数、整数、布尔数据。

    属性总是以四维向量的形式进行内部存储的,即使我们不会使用所有的4个分量。⼀个顶点位置可能存储(x,y,z),将占有4个分量中的3个。

    实际上如果是在平面情况下:只要在xy平⾯上就能绘制,那么Z分量就会⾃动设置为0;

    属性还可以是:纹理坐标、颜⾊色值、关照计算表⾯法线。

    属性会从本地客户机内存中复制存储在图形硬件中的一个缓冲区上。这些属性只提供给顶点着⾊器使⽤,对于⽚元着⾊器⽊有太大意义。

    声明:这些属性对每个顶点都要做改变,但并不意味着它们的值不能重复。通常情况下,它们都是不一样的,但有可能整个数组都是同一值的情况。

    注意:属性值不像其他两种传输方式可以直接作用于片元着色器,必须通过中间介传递才能到片元着色器

    2、Uniform值

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

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

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

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

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

    3、纹理(Texture)

    在顶点着⾊器、片段着⾊器中都可以对纹理数据进行采样和筛选。 

    典型的应⽤场景:⽚段着⾊器对⼀个纹理值进⾏采样,然后在⼀个三⻆形表⾯应⽤渲染纹理数据。

     纹理数据,不仅仅表现在图形,很多图形文件格式都是以无符号字节 (每个颜⾊通道8位)形式对颜⾊分量进行存储的。

    相关文章

      网友评论

          本文标题:OpenGL渲染管线简单介绍

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