gpt4 book ai didi

c++ - 在 OpenGl 中加载多个对象

转载 作者:行者123 更新时间:2023-11-28 05:43:01 26 4
gpt4 key购买 nike

我是 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 &lt; 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com