显示三维三角形的旋转



我试图展示一个相对于y轴旋转的三角形。但我不能恰当地展示它。我该如何解决?我的代码出了什么问题

init:

void init() {
glEnable(GL_DEPTH_TEST);
glEnable(GL_COLOR_MATERIAL);
glClearColor(0.7f, 0.9f, 1.0f, 1.0f);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum(-30, 30, -30, 30, 30, 90);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

显示器:

void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glRotatef(0.0, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);

glVertex3f(20.0f, 10.0f, -10.0f);
glVertex3f(50.0f, 15.0f, -20.0f);
glVertex3f(32.0f, 30.0f, -10.0f);
glEnd();
glutSwapBuffers();
}

模型围绕(0,0,0(旋转。不要沿负z轴平移顶点,而是将顶点排列在(0,0,0(周围,并在旋转模型后通过glTranslate平移模型。例如:

void display() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0.0f, 0.0f, -60.0f);
glRotatef(0.0, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);
glVertex3f(-15.0f, -10.0f, 5.0f);
glVertex3f(15.0f, -5.0f, -5.0f);
glVertex3f(-3.0f, 10.0f, 5.0f);
glEnd();
glutSwapBuffers();
}

请注意,必须确保模型位于透视投影的近平面和远平面之间。在你的情况下,近平面是30.0,远平面是90.0:

glFrustum(-30, 30, -30, 30, 30, 90);

所有不在近平面和远平面之间的几何体都将被剪裁。

由于你的几何体不是一个封闭的体积,我建议禁用面剔除:

glEnable(GL_CULL_FACE);

最新更新