Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 轨道摄影机(C+;+;,GLM)_C++_Opengl_Math_Camera_Glm Math - Fatal编程技术网

C++ 轨道摄影机(C+;+;,GLM)

C++ 轨道摄影机(C+;+;,GLM),c++,opengl,math,camera,glm-math,C++,Opengl,Math,Camera,Glm Math,我正在尝试为我的OpenGL应用程序编写轨道相机(基于glm::quat)。 我有几个问题: С是否可以从旋转矩阵+摄像机位置生成ViewMatrix 摄像机四分之一=glm::四分之一(glm::vec3(tmp_俯仰,tmp_偏航,0))*摄像机四分之一 float pitch = camera_quat.pitch(); float yaw = camera_quat.yaw(); glm::mat4 rotate = glm::mat4_cast(camera_quat); glm:

我正在尝试为我的OpenGL应用程序编写轨道相机(基于glm::quat)。 我有几个问题:

  • С是否可以从旋转矩阵+摄像机位置生成ViewMatrix

    摄像机四分之一=glm::四分之一(glm::vec3(tmp_俯仰,tmp_偏航,0))*摄像机四分之一

    float pitch = camera_quat.pitch();
    float yaw = camera_quat.yaw();
    
    glm::mat4 rotate = glm::mat4_cast(camera_quat);
    
    glm::vec3 view_direction(cos(yaw) * cos(pitch), sin(pitch), -sin(yaw) * cos(pitch));
    camera_position = target - view_direction * radius;
    
    glm::mat4 translate = glm::translate(camera_position);
    
    glm::mat4 view_matrix = **???**;
    
  • 这行对吗
    glm::vec3视图_方向(cos(偏航)*cos(俯仰)、sin(俯仰)、-sin(偏航)*cos(俯仰))

  • 如果我的英语不好,对不起。这不是我的母语,我是俄罗斯人。
    我希望你能帮助我。提前谢谢你

    如果将
    转换
    矩阵更改为

    glm::mat4 translate = glm::translate(-camera_position);
    
    ,应该很简单

    glm::mat4 view_matrix = rotation * translation;
    
    然而,有一个更简单的方法去那里。你基本上要做的是:将相机移到目标上,在那里旋转相机,再向后移动一点。这可以用矩阵形式表示(请注意,视图矩阵是相机的逆模型变换):


    如果你有一个四元数,为什么你要使用欧拉角,比如偏航、俯仰和横摇?我最近开始使用四元数。。。本例中的新手:(我正试图用gamepad棒围绕某个对象旋转摄影机。tmp_(偏航/俯仰)让我为单个帧构造临时quat什么是轨道摄影机?你能解释一下吗?当然可以。“轨道摄影机”:1)摄影机位置在对象(“目标”)周围的区域内2)眼睛方向=规格化(目标-摄像机位置)谢谢你的回答。但是你能解释一下为什么我们要取目标和半径的负值吗?我真的无法理解这部分解决方案…目标-世界空间中的位置,对吗?是的,目标位置在世界空间中。视图矩阵没有定位对象(摄像机)的目的。相反,它的目的是变换场景,使摄影机位于原点。这就是为什么所有参与矩阵都是反转的(我假设旋转矩阵已经反转)并且顺序相反。哦,我明白了!所以我可以用glm::反转(glm::translate(0,0,radius)*rotate*glm::translate(target))替换它,对吗?(旋转矩阵没有反转)我必须简单地反转一个模型矩阵?如果是,谢谢你的回答!你帮了我很多,再次感谢你!如果你也反转矩阵的顺序,那么这应该很好。
    view_matrix = glm::translate(0, 0, -radius) * rotate * glm::translate(-target);