ich brauch mal wieder Nachhilfe in 3D-mathe Grundlagen. :oops: Folgendes Problem hab ich:
Ich hab ein 3D-Spielobjekt, das in eine bestimmte Richtung guckt (mit dem Unit-Vektor Vector3 'Forward'). Jetzt würde ich gern den toten Winkel des Objekts grafisch darstellen, mit zwei einfachen Linien, die in einem bestimmten Winkel von der Guck-Richtung wegzeigen. Im Lokalen Koordinatensystem konnte ich die auch schön berechnen, nennen wir sie mal toterVector1 und toterVector2. Jetzt müsste ich die nur noch in den gleichen Winkeln rotieren, wie der Forward-Vektor (0 1 0) verdreht ist, und alles wäre ok. Ich habs mir aufgemalt und eigentlich müsste es so gehen: Wenn alpha die Verdrehung des Forward-Vektors um die Z-Achse ist, dann wäre
sin(alpha) = Forward.X
-> sprich ich krieg meine Verdrehung um die Y-Achse mit ArcSin(Forward.X) , richtig ?
Und wenn beta die Verdrehung meines Forward-Vektors um die X-Achse ist, dann wäre
tan(beta) = Forward.Z / Forward.Y
-> sprich beta = ArcTan(Forward.X / Forward.Z) ?
Jetzt müsste ich nur davon wieder je eine Rotations-Matrix für X- und Y-Rotation erstellen, also (in XNA):
Matrix rotX = Matrix.CreateRotationY(alpha);
Matrix rotY = Matrix.CreateRotationX(beta);
.. und dann meine beiden toten Vektoren damit drehen..
toterVector1 =Vector3.Transform(toterVector1, rotX * rotY);
toterVector2 = Vector3.Transform(toterVector2, rotX * rotY);
und dann auf Weltkoordinaten verschieben, und alles wäre gut ? Die zeigen nur leider sonstwo hin. Was mach ich falsch ?
lg vom ponx