Tengo un objeto que primero quiero rotar (sobre su propio centro) y luego lo traduzco a algún punto. Tengo un glm :: quat que contiene la rotación y un glm :: vec3 que contiene el punto al que necesita ser traducido.glm combinar rotación y traslación
glm::vec3 position;
glm::quat orientation;
glm::mat4 modelmatrix; <-- want to combine them both in here
modelmatrix = glm::translate(glm::toMat4(orientation),position);
Entonces en mi función hago render ..
pvm = projectionMatrix*viewMatrix*modelmatrix;
glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));
..y hacer ...
Desafortunadamente el objeto simplemente orbita alrededor del origen cuando solicito una rotación (cuanto más lejos la "posición" desde el origen, más grande es la órbita).
Cuando solicito solo la posición se traduce bien. Cuando aplico solo la rotación, permanece en el origen y gira alrededor de su centro (como se esperaba). Entonces, ¿por qué se vuelve extraño cuando los aplico a los dos? ¿Me estoy perdiendo algo básico?
Tenía la impresión de que glm :: translate aplica la traducción al primer argumento de la función. Gracias. – Jubei
@Jubei: * aplica * la traducción a la matriz. Correcto-lo multiplica. Eso significa que la traducción ocurre * primero *, cuando quiere que la rotación suceda primero. –
Gracias por esta respuesta, he estado atrapado en esto un tiempo hoy, pero a pesar de que me di cuenta de lo que estaba haciendo mal, simplemente no pude encontrar ninguna confirmación de que así es como se supone que funcionan las funciones. –