OpenGL - Koordinatensystem des Betrachters verschieben
-
Hallo!
Ich habe mehrere Objekte im 3D Raum sagen wir mal an Pos x=300, y=300, z=300 bis x=310,y=310,z=310.
Nehmen wir mal der Einfachkeit halber an, es sind Dreiecke.
Beim Drehen (glRotate) werden diese ja um den Ursprung des Betrachters gedreht.Kann ich irgendwie einstellen, dass diese um den Punkt 300, 300, 300 gedreht werden sollen?
Hier ein paar Codeauszüge mit einem Dreieick um es zu verstehen.
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Die vorherige Szene wird vom Bildschirm gelöscht, // damit die neuen nicht einfach über die alten // Objekte gezeichnet werden glLoadIdentity(); // modelview-Matrix wird zurückgesetzt GLfloat xx = 300.0; GLfloat yy = 300.0; GLfloat zz = 300.0; /* // Kamera "versetzen" durch Drehung // DIES HABE ICH VERSUCHT HAT ABER NICHT FUNKTIONIERT! GLfloat alp = atan(xx / zz); alp = - rad2deg(alp); GLfloat bet = atan(yy / xx); bet = - rad2deg(bet) glRotatef(alp, 0.0f, 1.0f, 0.0f); // Kamera in Richtung Objekt blicken lassen - Drehung um y Achse glRotatef(bet, 0.0f, 0.0f, 1.0f); // Kamera in Richtung Objekt blicken lassen - Drehung um z Achse */ glTranslatef(xx,yy,zz); // Drehung (rdreieck wird beim Zeichnen später immer weiter erhöht) glRotatef(rdreieck,0.0f,1.0f,0.0f); // Das Dreieck soll um die Y-Achse rotiert werden // Normales Dreieck glBegin(GL_TRIANGLES); // Ein Dreieck soll gezeichnet werden glColor3f(0.0f,0.0f, 1.0f); // es soll soll blau werden glVertex3f( 0.0f, 1.0f, 0.0f); // Die obere Ecke des Dreiecks glVertex3f(-1.0f, -1.0f, 0.0f); // unten links glVertex3f( 1.0f, -1.0f, 0.0f); // unten rechts glEnd(); // Zeichenaktion beenden // ... rdreieck -= 1.0f;
Wenn das Objekt wirklich so gezeichnet wird, ist es ja auch nicht sichtbar, da der sichtbare Bereich ja irgendwie zu klein ist, oder?
Gruß
jf_stgtCompiler: Visual Studio 2008 Express