OpenGL只显示最近的顶点绘制

时间:2015-01-21 17:05:35

标签: c++ opengl

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等。

1 个答案:

答案 0 :(得分:0)

在所有glClear( GL_COLOR_BUFFER_BIT );来电之前,您应该只拨打一次draw*()