Hi HaBo,
ich versuche gerade den Normalenvektor der Bildebene der Kamera von Irrlicht zu bestimmen. Die Kamerarotation wird in zwei Winkeln zurückgeliefert: Die Rotation um die X-Achse (Phi) und die Rotation um die Y-Achse (Theta). Aus diesen Winkeln möchte ich einen Vektor bestimmen und diesen später dann auch wieder in die Winkel zurück umrechnen. Im Grunde ist es also eine Umwandlung von karthesischen Koordinaten zu sphärischen Koordinaten. Ich verwende dazu folgenden Code:
Die Formeln habe ich von Wolfram Math World übernommen. Irrlicht hat jetzt jedoch ein anderes Koordinatensystem als Wolfram:
Die Rotationen werden im Bereich von 0° bis 360° angegeben, wie eingezeichnet. Nun versagt die Umwandlung von einen Vektor in ein Gradzahlenpaar, wenn der Vektor im Bereich 180 < Thetha < 360 ist. Wo liegt mein Fehler? Die Formeln sind eins zu eins übernommen. Kann es sein, dass ich für die Winkelfunktionen Bogenmaßwerte benötige? Sind meine Winkel anders als die von Wolfram?
Ohne korrekte Rotation,
bad_alloc
ich versuche gerade den Normalenvektor der Bildebene der Kamera von Irrlicht zu bestimmen. Die Kamerarotation wird in zwei Winkeln zurückgeliefert: Die Rotation um die X-Achse (Phi) und die Rotation um die Y-Achse (Theta). Aus diesen Winkeln möchte ich einen Vektor bestimmen und diesen später dann auch wieder in die Winkel zurück umrechnen. Im Grunde ist es also eine Umwandlung von karthesischen Koordinaten zu sphärischen Koordinaten. Ich verwende dazu folgenden Code:
Code:
vectorObj convertAnglesToVector(anglePair angles) {
vectorObj result;
double rPhi = (angles.phi * pi) / 180;
double rTheta = (angles.theta * pi) / 180;
result.X = cos(rPhi) * sin(rTheta);
result.Y = sin(rPhi) * sin(rTheta);
result.Z = cos(rTheta);
return result;
}
anglePair convertVectorToAngles(vectorObj vector) {
double x = vector.X;
double y = vector.Y;
double z = vector.Z;
anglePair result;
if (sqrt(x*x + y*y + z*z) != 0.0) {
result.theta = (acos(z) * (180 / pi));
result.phi = (atan2(y, x) * (180 / pi));
} else {
result.theta = result.phi = 0.0;
}
return result;
}

Die Rotationen werden im Bereich von 0° bis 360° angegeben, wie eingezeichnet. Nun versagt die Umwandlung von einen Vektor in ein Gradzahlenpaar, wenn der Vektor im Bereich 180 < Thetha < 360 ist. Wo liegt mein Fehler? Die Formeln sind eins zu eins übernommen. Kann es sein, dass ich für die Winkelfunktionen Bogenmaßwerte benötige? Sind meine Winkel anders als die von Wolfram?
Ohne korrekte Rotation,
bad_alloc
Zuletzt bearbeitet: