2012-12-03 14 views
9

Voglio trasformare un glm :: vec3 (camera.target) da un glm :: mat4 (camera.rotationMatrix). Cerco di moltiplicare questo mi dà un errore: errore: nessuna corrispondenza per 'operator *' in 'originalTarget * ((Camera *) questo) -> Camera :: rotationMatrix'. Suppongo di non poter moltiplicare un vec3 * mat4. GLM ha qualche funzione per trasformare questo? Altro modo di fare la trasformazione?Come posso trasformare glm :: vec3 da glm :: mat4

Il codice:

void Camera::Update(void) 
{ 
// Aplicamos la rotacion sobre el target 
glm::vec3 originalTarget = target; 
glm::vec3 rotatedTarget = originalTarget * rotationMatrix; 

// Aplicamos la rotacion sobre el Up 
glm::vec3 originalUp = up; 
glm::vec3 rotatedUp = originalUp * rotationMatrix; 

// Establecemos las matrices de vista y proyeccion 
view = lookAt(
position, //eye 
rotatedTarget, //direction 
rotatedUp //up 
); 
projection = perspective(
FOV, 
(float) getParent()->getEngine()->GetCurrentWidth()/getParent()->getEngine()->GetCurrentWidth() , 
near_plane, 
far_plane); 
} 

risposta

13

Si desidera convertire il vostro primo glm::vec3 in un glm::vec4 con il 4 ° elemento un 0, e quindi moltiplicare insieme.

glm::vec4 v(originalUp, 0); 
+5

Indovina che intendevi "con il 4 ° elemento uguale a 1.0", no? Traduci transfroms non funziona con 0. –

+2

Poiché è il vettore in su per la fotocamera, non ha bisogno di essere tradotto, quindi uno zero è più appropriato in questo caso – Slicedpan

+0

Siamo spiacenti. Non ho letto il codice completamente –

Problemi correlati