我想实现一个类似于glColor4f
固定功能方法的着色器。
着色器:
precision mediump float;
void main() {
gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0);
//gl_FragColor = vColor
};
绘图功能
glVertexAttribPointer(gvPositionHandle, 3, GL_FLOAT, GL_FALSE, 0, cube1);
glDrawElements(GL_TRIANGLES, 36, GL_UNSIGNED_BYTE, indices);
此代码绘制一个绿色的立方体。现在,我想将其更改为不同的颜色,例如红色。我希望每次都应该使用不同的颜色时不修改着色器代码。相反,应该可以使用glColor4f
方法执行类似的操作:
如何使用着色器完成此操作?
答案 0 :(得分:3)
为了达到这个目的,你可以使用制服。只需在着色器中声明一个:
uniform vec4 in_Color;
void main () {
gl_FragColor = in_Color;
}
然后,您需要通过使用程序(而不是着色器!)和统一名称(https://www.khronos.org/registry/OpenGL-Refpages/gl4/html/glGetUniformLocation.xhtml)
调用glGetUniformLocation来获取统一位置GLint location = glGetUniformLocation(program, "in_Color");
下一步是设置统一值,在这种情况下使用glUniform4f来执行此操作:
glUniform4f(location, r, g, b, a);
这样你可以使用glUniform4f调用glColor4f。