Hi, ich benutze lwjgl und versuche einen Vektor um einen bestimmten Winkel zu rotieren. In der Dokumentation habe ich dafür keine vorgesehene Methode gefunden. Hat jemand dazu nen Codesnippet rumfliegen oder lust schnell was zu schreiben? Es gibt ja auch das Tutorial in dem bestimmte Matrizen beschrieben sind um um bestimmte Achsen zu drehen. Allerdings weiß ich nicht wie ich solche Matrizen in lwjgl erstelle.
Falls nicht ganz klar geworden ist was ich meine: Ich arbeite an dem Tutorial Objekt gedreht und dennoch nach vorne bewegt und suche etwas das folgenden Code aus dem Tutorial in Java bzw. lwjgl beschreibt.
Code:
// Den Look-Vektor zuerst um die Z-Achse... RotateVector(LookVec, RotZAxis, -DegToRad(RotateZ)); // ...um die Y-Achse... RotateVector(LookVec, RotYAxis, -DegToRad(RotateY)); // ... und um die X-Achse drehen. RotateVector(LookVec, RotXAxis, -DegToRad(RotateX));
Ok, dann speichere ich den LookVektor in einer Matrix. Wenn ich dann folgenden Befehl aufrufe:
Code:
lookVec.translate(new Vector3f(0, 1, 0));
ist dann der angegebene Vektor in der Matrix beschrieben? Dann könnte ich ja mir der rotate Methode von Matrix4f den Vektor drehen. Allerdings bekomme ich dann schwierigkeiten bei dem Teil:
Bei mir ist der LookVec ja jetzt eine Matrix, Direction habe ich erst mal weggelassen. Wie kann ich jetzt den X Wert meines Vectors der in einer Matrix gespeichert ist mit 0.1 multiplizieren? Und wie kann ich dann den Vektor PosVect mit der Matrix LookVec addieren?
Ok, dann speichere ich den LookVektor in einer Matrix.
Was verstehst du den unter LookVektor? Üblicherweise speichert man einen Vektor in einem Vektor
Zitat:
lookVec.translate(new Vector3f(0, 1, 0));
Das erzeugt vom Prinzip eine Translationsmatrix die um den Vektor (010) verschiebt und multipliziert sie mit der Matrix lookVec. Die Ergebnis-Matrix steht dann wieder in lookVec.
Wenn du eine Roation oder eine andere Transformation auf einen Vektor/Punkt anwenden willst erstellst du erst eine Matrix und multiplizierst dann den Vektor mit dieser Matrix. Das geht mit der Methode Matrix4f.transform(). Die Methode braucht einen Vektor4f, d.h. du musst den 3D-Vektor um eine vierte Koordinate erweitern. Diese kannst du einfach auf 1.0 setzen.
Eigentlich brauchst du dich darum nicht selbst kümmern, den dafür sind ja die Methoden rotate, translate, scale usw. da.
Ich kann dir aber gerne erklären wie die Werte in einer Matrix zustande kommen. Es ist sehr hilfreich, aber nicht notwendig zu wissen was da intern passiert. Wenn dich das interessiert einfach nochmal fragen.
Ok, mal sehen ob ich das verstanden habe Wenn ich einen Vektor drehen will, wende ich erst die rotate Methode auf eine Matrix an und benutze dann die transform Methode der Matrix auf meinen zu drehenden Vektor?
Wenn ich einen Vektor drehen will, wende ich erst die rotate Methode auf eine Matrix an und benutze dann die transform Methode der Matrix auf meinen zu drehenden Vektor?
Mitglieder in diesem Forum: 0 Mitglieder und 7 Gäste
Du darfst keine neuen Themen in diesem Forum erstellen. Du darfst keine Antworten zu Themen in diesem Forum erstellen. Du darfst deine Beiträge in diesem Forum nicht ändern. Du darfst deine Beiträge in diesem Forum nicht löschen. Du darfst keine Dateianhänge in diesem Forum erstellen.