LookAt in Lua?
-
Guten Abend,
Ich versuche momentan in lua eine LookAt Funktion zu basteln aber befinde mich wohl irgendwie auf dem Holzpfad
Ich habe die Position von mir (einem Spieler) und der eines Zielpunktes gegeben und möchte, dass der Spieler zu dem Zielpunkt schaut.
Eigentlich müsste es über atan2 gehen aber nunja, müsste.Mein bisheriger Ansatz:
local x = targetpos.x - playerpos.x; local y = targetpos.y - playerpos.y; local z = targetpos.z - playerpos.z; local angles = { x = math.atan2(x, z); y = 0; z = math.atan2(x, y); }; player:SetAngles(angles);
Jemand eine gute Idee?
-
Das Problem mit Euler-Winkeln ist, dass, wenn Du erstmal um die X-Achse gedreht hast, die Y- und Z-Achsen ja woanders hin zeigen.
Wenn es anstatt der Euler-Winkel auch eine Matrix sein darf, kannst Du die 3 Basisvektoren folgendermassen berechnen:
z= normalize( targetpos - playerpos ) x= cross( z, up ) y= cross( x, z ) x= cross( y, z )
Wobei "cross" das Kreuzprodukt zweier Vektoren ist (das Ergebnis steht dann ja senkrecht auf den beiden) und "up" der Up-Vektor Deines Weltkoordinatensystems ist, zB (0,1,0).
Und der Translationsvektor ist ja schon durch "playerpos" gegeben.
-
Danke für die Antwort.
Das lässt sich zwar leicht umsetzen nur ich muss es eben auf 3 Winkel beschränken und nicht auf eine 3x3 Matrix
-
Dann gibt's ja immer noch Matrix to Euler.