【发布时间】:2016-02-06 23:11:33
【问题描述】:
大多数 GLSL 着色器在顶点着色器中使用颜色属性,该属性将被转发到片段着色器。像这样:
attribute vec4 position;
attribute vec4 color;
uniform mat4 mvp;
varying vec4 destinationColor;
void main(){
destinationColor = color;
gl_Position = mvp * position;
};
可以使用glVertexAtribPointer() 为每个顶点传递一种颜色,或者使用glVertexAttrib4fv() 为所有顶点传递一种全局颜色来设置颜色。我试图了解与顶点着色器中预定义变量gl_Color 的区别(如果有任何区别的话)。即
attribute vec4 position;
uniform mat4 mvp;
varying vec4 destinationColor;
void main(){
destinationColor = gl_Color;
gl_Position = mvp * position;
};
并使用glColorPointer() 为每个顶点传递一种颜色,或使用glColor4fv() 为所有顶点使用全局颜色。对我来说,第二个着色器看起来更好(= 更高效?),因为它使用的属性更少。但是所有教程和在线资源都使用第一种方法 - 所以我想知道我是否错过了任何东西,或者根本没有区别。
编写 GLSL 着色器时有什么更好的做法?
【问题讨论】:
标签: glsl shader vertex-shader