顶点处理器负责运行顶点着色器。顶点着色器的输入为顶点数据,也就是它的位置、颜色和法线等,这取决于OpenGL应用程序的发送。
下面的OpenGL代码为每个顶点向顶点处理器发送了一个颜色和一个顶点位置信息。
在一个顶点着色器中,你可以编写代码用于完成如下任务:
- 使用模型视图和投影矩阵进行顶点位置变换
- 法线变换,如果需要,还有法线的标准化
- 纹理坐标生成和变换
- 每个顶点的光照或为每个像素计算光照值
- 颜色计算
并没有要求你的着色器执行上面的所有操作,例如你的应用程序可能不使用光照。尽管如此,一旦你编写了一个顶点着色器并且用于替换顶点处理器的全部功能,那么你就不能执行法线变换,不能期望固定功能执行纹理坐标生成。当使用顶点着色器后,那么它负责管线中本阶段的所有功能。
在前一小节,我们了解到顶点处理器并没有关于顶点的连接信息,因为需要拓扑信息的操作不能在顶点着色器中进行。例如顶点着色器不可能执行背面剔除操作,因为顶点处理器处理的是顶点而不是面。顶点处理器孤立地处理每个顶点,处理每个顶点时,并不需要其他顶点的信息。
顶点着色器至少负责写一个变量:gl_Position,通常是使用模型视图和投影矩阵变换顶点。
顶点着色器能够访问OpenGL状态,因此它能够执行光照,使用材料等操作。它还能够访问纹理(只在最新的硬件上可用)。但是它不能够访问帧缓冲区。
———————————————————————————————————————————————————————————————
本文英文原文为《GLSL Tutorial – Vertex Processor 》 。
如果文中有一些地方翻译得不符合您的阅读习惯,您可以选择直接阅读英文原文,或者把您的翻译建议发给我,我一定会认真对待您的建议。