2012-12-03 127 views
9

我想通过glm :: mat4(camera.rotationMatrix)转换glm :: vec3(camera.target)。我尝试乘以这给我一个错误:错误:'originalTarget *((相机*)这个)' - >相机:: rotationMatrix''中'operator *'不匹配。我想我不能乘以vec3 * mat4。 GLM有一些功能可以改变这一点吗?其他方式来做转换?我如何通过glm :: mat4来转换glm :: vec3

代码:

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); 
} 

回答

13

你想先转换你glm::vec3与第四元素的0一个glm::vec4,然后它们相乘。

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

猜你的意思是“第四元素等于1.0”,不是吗?翻译transfroms将不会使用0. –

+2

由于它是相机的向上向量,因此不需要翻译,因此在这种情况下零更合适 – Slicedpan

+0

对不起。没有完整阅读的代码 –