如何使用glm::mat4将glm::vec3进行变换?

12

我想通过一个 glm::mat4 (camera.rotationMatrix)来对一个 glm::vec3 (camera.target) 进行变换。我尝试用乘法,但出现了错误:error: no match for 'operator*' in 'originalTarget * ((Camera*)this)->Camera::rotationMatrix。我猜测不能将一个 vec3 与 mat4 相乘。

GLM 是否有一些函数可以进行这种转换?还有其他方法可以进行变换吗?

代码:

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

请查看以下答案,了解JavaScript中的实现方法:链接 - Gangula
1个回答

17

您需要首先将您的glm::vec3转换为一个 glm::vec4,其中第四个元素为0,然后将它们相乘。

glm::vec4 v(originalUp, 0);

13
你的意思是“第四个元素等于1.0”,对吗?使用转换方式时不能与0一起使用。 - Oleg Titov
3
由于它是相机的上向量,因此不需要进行翻译,在这种情况下使用零更为合适。 - Slicedpan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接