tutorial transformations texturas geometric example ejemplos opengl 3d transform

transformations - opengl tutorial



glm combinar rotación y traducción (1)

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::vec3 position; glm::quat orientation; glm::mat4 modelmatrix; <-- want to combine them both in here modelmatrix = glm::translate(glm::toMat4(orientation),position);

Luego, en mi función de renderizado, lo hago ..

pvm = projectionMatrix*viewMatrix*modelmatrix; glUniformMatrix4fv(pvmMatrixUniformLocation, 1, GL_FALSE, glm::value_ptr(pvm));

..y render ...

Desafortunadamente, el objeto simplemente orbita alrededor del origen cuando aplico una rotación (cuanto más lejos esté la "posición" del origen, mayor será la órbita).

Cuando aplico 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?


Porque los estás aplicando en el orden equivocado. Al hacer glm::translate(glm::toMat4(orientation),position) , estás haciendo el equivalente a esto:

glm::mat4 rot = glm::toMat4(orientation); glm::mat4 trans = glm::translate(glm::mat4(1.0f), position); glm::mat4 final = rot * trans;

Tenga en cuenta que la traducción está en el lado derecho de la matriz, no en el izquierdo. Esto significa que la traducción ocurre primero , luego la rotación ocurre en relación con la traducción . Entonces la rotación ocurre en el espacio después de la traducción.

Quieres que la rotación suceda primero . De modo que invierta el orden de la multiplicación de la matriz.