Ich habe ein Objekt, das ich zuerst drehen möchte (über seine eigene Mitte) dann übersetzen Sie es zu einem bestimmten Punkt. Ich habe ein Glm :: Quat, das die Rotation hält und ein Glm :: Vec3, das den Punkt enthält, zu dem es übersetzt werden muss.Glm Mähdrescher Rotation und Übersetzung
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Dann meine Render-Funktion ich tun ..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
..und machen ...
Leider ist das Objekt umkreist nur um den Ursprung, wenn ich eine Rotation (je weiter gelten die "Position" vom Ursprung, desto größer die Umlaufbahn).
Wenn ich nur die Position anwende, wird es gut übersetzt. Wenn ich nur die Rotation anwende, bleibt sie am Ursprung und rotiert um ihren Mittelpunkt (wie erwartet). Warum wird es komisch, wenn ich beides anwende? Fehle ich etwas Grundlegendes?
Ich hatte den Eindruck, dass glm :: translate die Übersetzung auf das 1. Argument der Funktion anwendet. Vielen Dank. – Jubei
@Jubei: Es * wendet * die Übersetzung auf die Matrix an. Es richtig multipliziert es. Das heißt, die Übersetzung erfolgt * zuerst *, wenn die Rotation zuerst stattfinden soll. –
Danke für diese Antwort, ich bin schon eine Weile hier festgefahren, aber obwohl ich herausgefunden habe, was ich falsch mache, konnte ich einfach keine Bestätigung finden, dass die Funktionen funktionieren sollten. –