如何旋转glm相机

时间:2018-01-08 05:03:22

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

我已经工作了几个星期让我的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));
}

_for是{i} vec3的方向。

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
    }
    
  2. 如果在第一种方法上尝试了+ =,但是所有我都是数学错误,因为小数点基本上变为无穷大(尽管如果我添加一个以0结尾的常数,它将解决这个问题。)

    如果有人可以提供帮助,那将非常感激。提前谢谢!

1 个答案:

答案 0 :(得分:1)

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

Issue with GLM Camera X,Y Rotation introducing Z Rotation

这是另一个glm相机问题的链接。他们的问题是,相机正在进行随机的滚动滚动,而当我向左看时我没有投球。但是在复制了他们的代码后,我发现它的解决方案无处不在,但是当您在代码中指定新的向上向量时,将其替换为glm::vec3(0.0f, 1.0f, 0.0f)。我用变量做了这个,它对我来说没有错误。

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

P.S。我没有删除这个,因为其他任何人,我所处的情况,都希望这个评论有用。