我目前加入的着色器系统为我的项目,遇到了一点,我很希望有人能理清障碍的。 我的项目是用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