【问题标题】:How can I transform a glm::vec3 by a glm::mat4如何通过 glm::mat4 转换 glm::vec3
【发布时间】:2012-11-21 07:42:45
【问题描述】:

我想用glm::mat4 (camera.rotationMatrix) 转换glm::vec3 (camera.target)。我尝试乘以这给我一个错误:错误:'originalTarget * ((Camera*)this)->Camera::rotationMatrix 中的'operator *'不匹配。我想我不能乘以 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);
} 

【问题讨论】:

    标签: opengl transform glm-math


    【解决方案1】:

    您想先将glm::vec3 转换为glm::vec4,第四个元素为0,然后将它们相乘。

    glm::vec4 v(originalUp, 0);
    

    【讨论】:

    • 猜你的意思是“第 4 个元素等于 1.0”,不是吗?翻译转换不适用于 0。
    • 因为它是相机的上向量,所以不需要平移,所以在这种情况下零更合适
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多