Ich versuche, 2 Kästchen in OpenGL zu erstellen, aber sie erscheinen von innen nach außen und manchmal überlappen sie nicht richtig. Video http://www.youtube.com/watch?v=IVJu4zJFp7QOpenGL rendert Kästchen inside-out
Ich vermute, es ist eine Tiefe Problem, aber ich konnte nicht herausfinden, was ich falsch mache.
Hier ist der Code, den ich zu initialisieren bin mit:
glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH);
glDisable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
Hier ist meine distplay Funktion glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
drawYellowBox();
drawBlueBox();
Und der Code, den ich mit den Formen zeichnen:
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();
Danke.
Leider doesn nicht Löse das Problem nicht. Ich habe versucht, die Scheitelpunkte neu anzuordnen, aber ohne Wirkung. Das Zurückkehren zu den ursprünglichen Scheitelpunkten und das Ändern von glFrontFace in CW hat das Rendering noch immer nicht behoben. – Ares
@Ares betrachten bearbeitete Antwort. – Vallentin
Das war mein Problem auch. (Mit Ubuntu 16.04, Python GL und GLUT. Ich habe es getestet und isoliert, indem ich GLUT verwendet habe, um Würfel anstelle meiner eigenen Ecken zu zeichnen; wenn der eigene Würfel von GLUT von innen nach außen ist, ist es kein Problem, aber die Tiefenmarkierung muss aktiviert sein.) –