OpenGL新手,尝试使用矩形绘制功能分别绘制2个矩形。使用openGL 3,GLFW和GLEW。我创建了一个名为drawBox的函数来绘制一个矩形。 我的问题是,如果我在主循环中多次调用它,则只显示最后绘制的矩形。
void drawBox(float x, float y, float w, float h, float r, float g, float b) {
GLfloat colours[15], vertices[10] = {
x, y,
x, y + h,
x + w, y + h,
x + w, y,
x, y
};
for(int i = 0; i < 5; ++i) {
colours[3*i] = (GLfloat)r;
colours[3*i + 1] = (GLfloat)g;
colours[3*i + 2] = (GLfloat)b;
}
GLuint buff[2];
glGenBuffers(2, buff);
glBindBuffer(GL_ARRAY_BUFFER, buff[1]);
glBufferData(GL_ARRAY_BUFFER, 15*sizeof(GLfloat), colours, GL_STREAM_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(1);
glBindBuffer(GL_ARRAY_BUFFER, buff[0]);
glBufferData(GL_ARRAY_BUFFER, 10*sizeof(GLfloat), vertices, GL_STREAM_DRAW);
glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, (void*)0);
glEnableVertexAttribArray(0);
glClear( GL_COLOR_BUFFER_BIT );
glUseProgram(defaultShader);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 5);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glDeleteBuffers(2, buff);
}
我需要更改以使此功能显示矩形而不管过去的绘制。假设所有z-indices都是0并且重叠永远不会发生。假设我可能需要在两次调用drawBox之间进行drawCircle调用或drawTriangle等。
答案 0 :(得分:0)
在所有glClear( GL_COLOR_BUFFER_BIT );
来电之前,您应该只拨打一次draw*()
。