我刚刚阅读了有关顶点数组对象和顶点缓冲区对象的教程,但我无法从以下代码中弄清楚 OpenGL 如何知道第一个 VBO ( vertexBufferObjID[0]
) 表示顶点坐标,而第二个 VBO ( vertexBufferObjID[1]
) 表示颜色数据?
glGenBuffers(2, vertexBufferObjID);
// VBO for vertex data
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[0]);
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), vertices, GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)0, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(0);
// VBO for colour data
glBindBuffer(GL_ARRAY_BUFFER, vertexBufferObjID[1]);
glBufferData(GL_ARRAY_BUFFER, 9*sizeof(GLfloat), colours, GL_STATIC_DRAW);
glVertexAttribPointer((GLuint)1, 3, GL_FLOAT, GL_FALSE, 0, 0);
glEnableVertexAttribArray(1);
编辑:感谢彼得的回答,我发现以下两行代码将每个 VBO 与着色器连接起来(索引 0 和 1 与 VBO 索引相关):
glBindAttribLocation(programId, 0, "in_Position");
glBindAttribLocation(programId, 1, "in_Color");