我目前正在向我的项目中添加一个着色器系统,并且遇到了一些我希望有人能解决的问题。我的项目是用 Java 编写的,使用 LWJGL 库,并以 OpenGL 2.1 为目标。
据我了解,使用glVertexAttrib
函数设置一个属性,该属性在传递新值之前保持不变。例如,以下调用应该使我的所有几何图形变为白色,直到我更改它:
glVertexAttrib3f(shader.getAttributeLocation("in_Color"), 1.0f, 1.0f, 1.0f);
但是,如果in_Color
绑定到索引 0(使用 时就是这种情况glGetAttribLocation
),则每次调用 只会影响一个顶点glVertexAttrib3f
。例如,如果我把它放到我的初始化代码中:
int colorLocation = shader.getAttributeLocation("in_Color");
glVertexAttrib3f(colorLocation, 1.0f, 1.0f, 1.0f);
glVertexAttrib3f(colorLocation, 1.0f, 0.0f, 0.0f);
glVertexAttrib3f(colorLocation, 0.0f, 1.0f, 0.0f);
glVertexAttrib3f(colorLocation, 0.0f, 0.0f, 1.0f);
然后尝试使用以下方法渲染立方体:
for(int i = 0; i < 6; i++) {
glDrawArrays(GL_TRIANGLE_STRIP, i * 4, 4);
}
这是呈现的内容:http: //i.imgur.com/uSuT3sH.jpg
但是,如果in_Color
绑定到任何其他属性索引,则整个立方体是蓝色的,正如预期的那样:http: //imgur.com/uOVa2iA.jpg