OpenGL 仅显示最近的顶点绘制
OpenGL only most recent vertex draw displayed
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 或其他操作。
你应该只调用 glClear( GL_COLOR_BUFFER_BIT );
一次,在所有 draw*()
类之前。
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 或其他操作。
你应该只调用 glClear( GL_COLOR_BUFFER_BIT );
一次,在所有 draw*()
类之前。