J
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_stgt
Compiler: Visual Studio 2008 Express