实现与glColor4f类似的片段着色器

时间:2017-02-21 05:44:54

标签: opengl-es

我想实现一个类似于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方法执行类似的操作:

  1. 设置颜色1 //充当glColor4f(0.0,1.0,0.0,1.0);
  2. glDrawElements // draw obj 1
  3. 设置颜色2 //充当glColor4f(1.0,0.0,0.0,1.0);
  4. glDrawElements // draw obj 2
  5. 如何使用着色器完成此操作?

1 个答案:

答案 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。