我是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的内容,但我并没有真正理解它。希望你能帮忙。
答案 0 :(得分:1)
就像genpfault所说的那样,每次绘制一个对象时都会清除COLOR_BUFFER_BIT
,这会导致先前绘制的对象从屏幕上被删除(颜色)。在绘制屏幕之前,您只需要在开始时调用glClear()
一次。
无论如何,我建议你搜索一下现代的OpenGL。现在使用OpenGL的方式是名称&#34;立即模式&#34;这是坏事,慢事和弃用。这是good site
答案 1 :(得分:0)
我认为您的问题是您的使用:
glClear(GL_COLOR_BUFFER_BIT);
您在Box()和CreateCircle()函数中调用它。这样做会导致您似乎在描述的问题。该呼叫不属于这些功能。它属于Draw()函数的顶部,而不是其他任何地方。