Hallo.
Ich versuche mich gerade an
OpenGL und habe nun folgendes Problem:
Ich habe eine Kugel an den Raumkoordinaten 0,0,0 erstellt und mit einer Textur belegt.
Verschiebungen habe ich keine vorgenommen.
Also befindet sich die Kamera innerhalb der Kugel an den Raumkoordinaten 0,0,0 .
Delphi-Quellcode:
glBindTexture(GL_TEXTURE_2D, Images[2]);
vSkySphere := gluNewQuadric;
gluQuadricDrawStyle(vSkySphere, GLU_FILL);
gluQuadricNormals(vSkySphere, GLU_SMOOTH);
gluQuadricTexture(vSkySphere, GL_TRUE);
gluSphere(vSkySphere, 1.00, 32, 32);
glClear(GL_DEPTH_BUFFER_BIT);
Diese Kugel soll als Skysphere dienen, also als Himmelskugel.
Um diese Kugel zu rotieren, frage ich die Mauskoordinaten ab,
berechne die Differenzen auf X- und Y-Achse zum Fenster-Zentrum und berechne daraus die Rotation.
Delphi-Quellcode:
GetCursorPos(MPos);
A := (MPos.Y - WndCenterPos.Y);
B := (MPos.X - WndCenterPos.X);
CurrView.AngleX := CurrView.AngleX + (B * 0.0002);
CurrView.AngleY := CurrView.AngleY + (A * 0.0002);
Zur Rotation und Darstellung wird dann folgender Code ausgeführt:
Delphi-Quellcode:
glRotate(CurrView.AngleX, 0.00, 1.00, 0.00);
glRotate(CurrView.AngleY, 1.00, 0.00, 0.00);
glBindTexture(GL_TEXTURE_2D, Images[2]);
vSkySphere := gluNewQuadric;
gluQuadricDrawStyle(vSkySphere, GLU_FILL);
gluQuadricNormals(vSkySphere, GLU_SMOOTH);
gluQuadricTexture(vSkySphere, GL_TRUE);
gluSphere(vSkySphere, 1.00, 32, 32);
glClear(GL_DEPTH_BUFFER_BIT);
Nun zu meinem Problem:
Wenn bei der Berechnung der Rotation (s. o.) A oder B Null ist,
rotiert die Kugel korrekt um die X- oder Y-Achse.
Sobald jedoch beide Zahlen ungleich Null sind, also um X-
UND Y-Achse rotiert wird,
rotiert die Kugel nicht mehr wie gewünscht.
Befindet sich der Cursor bspw. unten rechts in einem 45°-Winkel, rotiert die Kugel in einer Acht
von der Mitte nach unten rechts, unten links, oben rechts, oben links zurück zur Mitte.
Kann mir jemand sagen sagen was ich da falsch mache.