我想在OpenGL中创建2个盒子,但它们出现内外,有时他们不正确重叠。视频http://www.youtube.com/watch?v=IVJu4zJFp7QOpenGL渲染盒子里面出来
我猜这是一个深度问题,但我一直无法弄清楚我做错了什么。
这里是我使用的初始化代码:
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glDisable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
这里是我的distplay功能 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
drawYellowBox();
drawBlueBox();
和代码我使用绘制形状:
glPushMatrix();
glBegin(GL_QUADS);
glColor3f(0.15, 0.15, 0.0);
// draw front
glVertex3f(-1.0, -1.5, 1.0);
glVertex3f(1.0, -1.5, 1.0);
glVertex3f(0.75, 1.5, 0.75);
glVertex3f(-0.75, 1.5, 0.75);
glColor3f(0.3, 0.3, 0.0);
// draw back
glVertex3f(1.0, -1.5, -1.0);
glVertex3f(-1.0, -1.5, -1.0);
glVertex3f(-0.75, 1.5, -0.75);
glVertex3f(0.75, 1.5, -0.75);
glColor3f(0.45, 0.45, 0.0);
// draw left
glVertex3f(-1.0, -1.5, -1.0);
glVertex3f(-1.0, -1.5, 1.0);
glVertex3f(-0.75, 1.5, 0.75);
glVertex3f(-0.75, 1.5, -0.75);
glColor3f(0.6, 0.6, 0.0);
// draw right
glVertex3f(1.0, -1.5, 1.0);
glVertex3f(1.0, -1.5, -1.0);
glVertex3f(0.75, 1.5, -0.75);
glVertex3f(0.75, 1.5, 0.75);
glColor3f(0.75, 0.75, 0.0);
// draw top
glVertex3f(-0.75, 1.5, 0.75);
glVertex3f(0.75, 1.5, 0.75);
glVertex3f(0.75, 1.5, -0.75);
glVertex3f(-0.75, 1.5, -0.75);
glColor3f(0.9, 0.9, 0.0);
// draw bottom
glVertex3f(-1.0, -1.5, -1.0);
glVertex3f(1.0, -1.5, -1.0);
glVertex3f(1.0, -1.5, 1.0);
glVertex3f(-1.0, -1.5, 1.0);
glEnd();
glPopMatrix();
glPushMatrix();
glTranslatef(0.0,2.5,0.0);
glRotatef(joint_ui_data->getDOF(Keyframe::HEAD), 0.0, 1.0, 0.0);
glBegin(GL_QUADS);
glColor3f(0.0, 0.15, 0.15);
// draw front face
glVertex3f(-0.8, -0.45, 0.8);
glVertex3f(0.8, -0.45, 0.8);
glVertex3f(0.75, 0.45, 0.75);
glVertex3f(-0.75, 0.45, 0.75);
glColor3f(0.0, 0.3, 0.3);
// draw back face
glVertex3f(0.8, -0.45, -0.8);
glVertex3f(-0.8, -0.45, -0.8);
glVertex3f(-0.75, 0.45, -0.75);
glVertex3f(0.75, 0.45, -0.75);
glColor3f(0.0, 0.45, 0.45);
// draw left face
glVertex3f(-0.8, -0.45, -0.8);
glVertex3f(-0.8, -0.45, 0.8);
glVertex3f(-0.75, 0.45, 0.75);
glVertex3f(-0.75, 0.45, -0.75);
glColor3f(0.0, 0.6, 0.6);
// draw right face
glVertex3f(0.8, -0.45, 0.8);
glVertex3f(0.8, -0.45, -0.8);
glVertex3f(0.75, 0.45, -0.75);
glVertex3f(0.75, 0.45, 0.75);
glColor3f(0.0, 0.75, 0.75);
// draw top
glVertex3f(-0.75, 0.45, 0.75);
glVertex3f(0.75, 0.45, 0.75);
glVertex3f(0.75, 0.45, -0.75);
glVertex3f(-0.75, 0.45, -0.75);
glColor3f(0.0, 0.9, 0.9);
// draw bottom
glVertex3f(-0.8, -0.45, -0.8);
glVertex3f(-0.8, -0.45, 0.8);
glVertex3f(0.8, -0.45, 0.8);
glVertex3f(0.8, -0.45, -0.8);
glEnd();
glPopMatrix();
谢谢。
不幸的是,这doesn解决不了问题。我尝试重新排序顶点,但没有效果。恢复到原始顶点并将glFrontFace更改为CW仍未修复渲染。 – Ares
@Ares查看编辑答案。 – Vallentin
这也是我的问题。 (使用Ubuntu 16.04,python GL和GLUT,我使用GLUT来绘制立方体而不是我自己的顶点来测试和隔离它;如果GLUT自己的立方体在里面,那么它不是绕组问题,但需要打开深度标记。 –