Ich arbeite seit einiger Zeit an einer Weltraumsimulation. Zuerst benutzte ich meine eigene 3D-Engine mit Software-Rasterizer.Rotieren eines Raumschiffmodells für einen Weltraumsimulator/Spiel
Aber ich habe, wenn die Zeit für die Implementierung Texturen zurückzuführen war. Nun habe ich nach einiger Zeit wieder angefangen und benutze jetzt OpenGL (mit SDL) um die 3D Modelle zu rendern.
Aber jetzt schlug ich eine andere Mauer.
Ich kann nicht herausfinden, wie man eine gute Drehungen zu machen. Als Raum-Simulator I ähnliche Kontrollen zu einem flighsim
mit
glRotatef(angleX, 1.0f, 0.0f, 0.0f);
glRotatef(angleY, 0.0f, 1.0f, 0.0f);
glRotatef(angleZ, 0.0f, 0.0f, 1.0f);
oder ähnliche wollen,
nicht richtig funktioniert, wenn ich das Modell (Raumschiff) zunächst um 90 Grad nach links drehen und dann drehe es nach oben. Stattdessen rollt es.
Hier ist ein Bild, das mein Problem darstellt.
Ich habe versucht, einige Tricks, dies zu versuchen und zu begegnen, aber irgendwie fühle ich mich etwas fehlt. Es hilft auch nicht, dass Simulator Stil Rotation Beispiele sind fast unmöglich zu finden.
Also suche ich nach Beispielen, Links und der Theorie, ein 3D-Modell (wie ein Raumschiff, ein Flugzeug) zu drehen.
Soll ich drei Vektoren (links, oben, vorwärts) zur Orientierung verwenden, wie ich auch Dinge wie Beschleunigung von Thrustern und Sachen, die sich mit der Rotation (Orientierung?) Und von den Modellen ändern wird berechnen müssen Perspektive zeigt in eine Richtung wie Raketentriebwerke.
ich mit Mathe bin nicht sehr gut und versucht, eine Lösung zu visualisieren nur Kopfschmerzen geben
Endlich knacke ich es! Ich verwende eine Matrix, die die Ausrichtung der Modelle beschreibt. Wenn ich die Aufwärts-Taste drücke, ruft eine Funktion auf, die eine Rotationsmatrix erzeugt, die ich um den gewünschten Betrag rotiere, und multipliziere diese dann mit der Orientierungsmatrix der Modelle. – kvasan