基础图形管线

来源:互联网 发布:日本经济数据2016 编辑:程序博客网 时间:2024/05/17 20:34

     OpenGL中的图元(Primivtives)只不过是顶点的集合以预定义的方式结合在一起罢了。

------------客户端和服务器

     管线分成两部分客户端和服务器端


     服务器和客户机在功能上也是异步的。

     客户机不断地将数据块和命令块组合在一起并送入缓冲区,然后这些缓冲区会发送到服务器执行。服务器将执行这些缓冲区的内容,,与此同时客户端有做好了发送下一个用于渲染的数据或信息的准备。如果服务器停止工作等待客户机,或者客户机停止工作来等待服务器做好接受更多命令和数据的准备,我们就把这种情况称为管线停滞。


    CPU:将渲染命令与数据组合起来送入缓冲区,发送到服务端

    GPU:执行缓冲区的内容

-------------着色器


    这些着色器必须从源代码中编译和链接到一起才能使用。最终准备就绪的着色器程序随后在第一阶段构成顶点着色器,在第二阶段构成片段着色器。


    顶点着色器处理从客户机输入的数据,应用变换,或者进行其他类型的数学运算来计算光照效果、位移、颜色值,等等。为每个顶点执行一次,并行执行。

    顶点做好了光栅化的准备。顶点组合在一起,逐个片段进行光栅化。每个片段执行片段着色器而进行填充,片段着色器会输出我们将在屏幕上看到的最终颜色值。并行执行。

  

    属性,就是每个顶点都要做改变的数据元素。实际上,顶点为止本身就是一个属性。属性值可以是浮点数、整数、或布尔数据。属性总是以四维向量的形式进行内部存储的,即使我们不会使用到所有4个分量。OpenGL会将4个分量设为1。实际上,如果我们只在x、y平面中绘制图,那么第3个分量将会自动设为0,而第四个分量依旧设为1。

    属性会从本地客户机内存中复制存储在图像硬件中(这种情况的可能性很大)的一个缓冲区上。这些属性只供顶点着色器使用,对于片段着色器来说没有什么意义。


    Uniform 值本质上像属性一样,可以是浮点数、整数或布尔值,但和属性不同的是,顶点着色器和片段着色器中都可以使用Uniform变量。Uiniform可以是既可以是标量,也可以是矢量类型,我们也可以使用Uniform矩阵。

    Uniform变量在每个批次改变一次,而不是每个顶点改变一次。Uniform变量一个最常见的应用是在顶点渲染中设置变换矩阵(第四章介绍)。


    纹理并不仅仅是表现图形。很多图形文件都是以无符号字节(每个颜色通道8位)形式对颜色分量进行存储的,但是我们仍然可以设置浮点纹理。这就是说,任何大型浮点数据块(例如消耗资源很大的大型查询表)都可以通过这种方式传递给着色器。


    输出数据是作为一个阶段着色器的输出定义的,而在后续阶段的着色器则是作为输入(In)定义的。


    

0 0
原创粉丝点击