Cómo rotar un objeto alrededor de un punto con GLM OpenGL C++?
Estoy intentando hacer algo así, pero por alguna razón mi cubo todavía gira alrededor del origen. ¿Qué estoy haciendo mal?
glm::mat4 identity = glm::mat4(1.0f); // construir matriz identidad
glm::mat4 trans;
glm::mat4 rot;
glm::mat4 transBack;
glm::mat4 M;
glm::vec4 br = glm::vec4(currentPositionX - 0.4, 0.0f, currentPositionZ + 1.2, 1.0f);
// obtener la transformación de matriz para la traducción
trans = glm::translate(identity, glm::vec3(+0.4, 0.0f, -1.2));
identity = glm::mat4(1.0f); // construir matriz identidad
// obtener la transformación de matriz para la rotación
rot = glm::rotate(identity, glm::radians(rotation), glm::vec3(0.0, 1.0, 0.0)); // rotar con ROT del coche -
identity = glm::mat4(1.0f); // construir matriz identidad
// obtener la transformación de matriz para la traducción
transBack = glm::translate(identity, glm::vec3(-0.4, 0.0f, +1.2));
M = transBack * rot * trans;
// A' = M . A, siendo A un punto
br = M * br;
davy.ai
Parece que estás aplicando las transformaciones en el orden incorrecto. En el código, primero estás traduciendo el cubo, luego girándolo y luego volviéndolo a su posición original. Esto hará que el cubo rote alrededor de su origen local, lo cual puede que no sea lo que deseas.
Para rotar el cubo alrededor de un punto diferente, necesitas traducirlo primero hacia ese punto, luego aplicar la rotación y luego traducirlo de vuelta. Por lo tanto, el orden correcto de las transformaciones debería ser:
En el código, puedes lograr esto cambiando el orden de las transformaciones de la siguiente manera:
Con estos cambios, el cubo debería girar ahora alrededor del punto
origenDeRotacion
.