【问题标题】:How do I rotate glm camera如何旋转 glm 相机
【发布时间】:2018-01-08 05:03:22
【问题描述】:

我已经工作了几个星期来让我的 glm 相机旋转,但无济于事。我尝试了很多不同的方法。第一个是我用过的最好的相机。如果有人可以向我解释我哪里出错了,以及如何解决它,谢谢!

1 - 问题 - 如果我越过我的肩膀,也就是向左 90 度看,然后尝试向上看,它不会。

void addRotation(const glm::vec3 rot) {

    _for = glm::rotate(_for, rot.x, glm::vec3(0,1,0));

    _for = glm::rotate(_for, rot.y, glm::vec3(1,0,0));
}

_forvec3 在我正在寻找的方向。

glm::mat4 getViewProj() { return proj * lookAt(_pos, _pos + _for, _up); }

proj 定义为

proj = glm::perspective(fov, aspect, 0.01f, 100.0f);
  1. 这段代码并没有真正起作用,但我还是会包含它。

    void addRotation(const glm::vec3 rot) {
    
        glm::mat4 rx = glm::rotate(glm::mat4(1.0f), rot.x, glm::vec3(0,1,0));
    
        glm::mat4 ry = glm::rotate(glm::mat4(1.0f), rot.y, glm::vec3(1,0,0));
    
        _for = rx * ry; //_for was a mat4, everything else was the same
    }
    

如果在第一种方法上尝试过 +=,但我只是数学错误,因为小数点基本上是无穷大(尽管如果我添加一个以 0 结尾的常数,它会解决这个问题)。

如果有人可以提供帮助,将不胜感激。提前谢谢!

【问题讨论】:

  • 您使用的是什么版本的 OpenGL,您正在使用着色器吗?
  • 核心 3 版本。
  • 请注意glm 标签指的是广义线性模型 - 请改用glm-math(已编辑)

标签: c++ camera rotation perspective glm-math


【解决方案1】:

好的,经过4个小时的寻找,我找到了解决方案,

Issue with GLM Camera X,Y Rotation introducing Z Rotation

这是另一个 glm 相机问题问题的链接。他们的问题是那里的相机正在随机滚动,而我的相机在向我的左边看时没有俯仰。但是在复制了他们的代码之后,我发现它的解决方案无处不在,但是当你在代码中分配新的向上向量时,将其替换为glm::vec3(0.0f, 1.0f, 0.0f)。我用一个变量做了这个,它对我来说很好,还没有错误。

我不完全确定我理解为什么这个答案对我自己有效,但是从我猜测的情况来看,当使用已经调整过的变量分配变量时,它会慢慢产生数学错误。但是有一个具体的参考点并且只在 glm::lookAt 计算中使用调整后的变量就可以了。但是,如果有人可以更好地解释它,知道更好的解决方案,或者确切地知道它为什么起作用,请告诉我。

附:我不会删除此评论,因为与我处境相同的其他任何人都希望此评论有用。

【讨论】:

    猜你喜欢
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多