顶点着色器是CPU部分的渲染流水线中的第一个渲染处理阶段。这个阶段是第一个由程序员直接控制的阶段,但我们要知道,有些数据的操作发生在这个阶段之前。在DirectX中被称为输入汇编程序(input assembler)的过程中,几个数据流可能会交织在一起,形成沿管线发送的顶点和图元的集合。例如,一个对象可以一个对象可以由一个位置数组和一个颜色数组表示。输入汇编程序通过创建具有位置和颜色的顶点数组来创建这个对象的三角形(或线、点)。第二个对象可以用相同的位置数组(以及不同的模型变换矩阵)和不同的颜色数组来表示。在输入汇编程序中支持执行实例化。这使得一个对象改变一部分可变数据来生成不同的实例(例如,改变猫模型的纹理颜色,生成不同的猫实例,黑猫、白猫、黑白猫等),所有的实例都调用同一着色器。
三角片网格由一组顶点表示,每个顶点与模型表面上的特定位置相关联。除了需要关联位置外,还可以关联颜色和纹理坐标等。把表面法线也绑定在相应顶点里貌似一个奇怪的选择。在每个三角面都有一个明确的表面法线,直接使用三角面的法线作为着色数据可能更有意义。然而,在实际渲染时,通常使用三角片网格作为潜在的曲面,而顶点的法线被用来表示这个表面的方向,而不是表示这个三角片网格本身的方向。
图1显示了两个三角片网格表示的表面,一个光滑和一个具有尖锐的折痕侧视图。
图1 三角片网格的侧视图(用黑色表示),三角片网格根据法线形成的曲面(用红色表示)。在左边的中间点单法线形成了光滑曲面,而右边的是给了两个法线,表现是一个折痕。
顶点着色器是处理三角片网格的第一步。顶点着色器并不处理描述三角片的构成形式的数据。顾名思义,它是专门处理的顶点的。顶点着色器提供一种方法来修改、创建或忽略与每个三角片顶点关联的数据,例如颜色、法线、纹理坐标和位置。通常顶点着色程序将顶点从模型空间变换到齐次裁剪空间。无论如何,顶点着色器总得输出顶点在齐次裁剪空间的坐标。
每个传入的顶点都由顶点着色程序处理,并输出一些值,这些值被差值到一个三角片或直线上。顶点着色器既不能创建,也不能破坏顶点,并且由一个顶点生成的结果不能传递到另一个顶点。由于每个顶点都是独立处理的,GPU上的每一个着色处理器都可以并行的运行顶点着色程序来处理顶点流。
本文转自:博客园 - mshentai,转载此文目的在于传递更多信息,版权归原作者所有。如不支持转载,请联系小编demi@eetrend.com删除。