我是 OpenGL 的新手,现在正在学习创建对象。我试图加载多个对象,但只显示最后一个对象。
#include <gl/glut.h>
#include <math.h>
void Box (void){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(1.0f,0.0f,0.0f);
glVertex3f(-0.14,-0.10,0.00);
glVertex3f(0.10,-0.10,0.00);
glVertex3f(0.10,0.30,0.00);
glVertex3f(-0.03,0.30,0.00);
glVertex3f(-0.14,0.00,0.00);
glEnd();
glFlush();
}
void Circle(float cx, float cy, float r, int segmen)
{
glBegin(GL_POLYGON);
for(int i = 0; i < segmen; i++)
{
float theta = 2.0f * 3.14f * float(i) / float(segmen);
float x = r * cosf(theta);
float y = r * sinf(theta);
glVertex3f(x + cx, y + cy,0.0);
}
glEnd();
}
void CreateCircle(void) {
glClear(GL_COLOR_BUFFER_BIT);
glColor3f(1.0, 1.0, 0.0);
Circle(0.5, 0.5, 0.2, 45);
glFlush();
}
void Draw (void) {
glPushMatrix();
Box();
glPopMatrix();
glPushMatrix();
glTranslatef(0.14,0.0,0.0);
glRotatef(90.0,0.0,0.0,1.0);
Box();
glPopMatrix();
glPushMatrix();
CreateCircle();
glPopMatrix();
glFlush();
}
int main (int argc,char* argv[]){
glutInit(&argc,argv);
glutInitWindowSize(800,800);
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGBA);
glutCreateWindow("object5B");
glutDisplayFunc(Draw);
glClear(GL_COLOR_BUFFER_BIT);
glClearColor(1.0f,1.0f,1.0f,1.0);
glutMainLoop();
return 0;
}
在尝试在互联网上搜索时,我发现了一些关于 object_list 的信息,但我并没有真正理解它。希望你能帮上忙。
最佳答案
就像 genpfault 所说的那样,每次绘制对象时都会清除 COLOR_BUFFER_BIT
,这会导致较早绘制的对象从屏幕上删除(颜色)。在屏幕上绘制之前,您只需在开始时调用一次 glClear()
。
无论如何,我建议您搜索现代 OpenGL。您现在使用 OpenGL 的方式被称为“即时模式”,它不好、慢且已弃用。这是一个 good site
关于c++ - 在 OpenGl 中加载多个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748049/