我有带Obs和VRP和Up vector 的透视相机。

我想实现转身以使自己像场景中的观察者一样。我已经实现了前进和后退,因为它只是将相同量的z坐标添加到Obs和VRP(均为vec3)。
当我尝试实现旋转时,问题就来了,
有什么办法可以做矩阵乘积吗?我已经尝试过了:

x = R *余弦角

z = R *正弦角

其中R是 vector 的大小(VRP-Obs),但不起作用

编辑:我在这里应用 View 和投影矩阵:

    void MyGLWidget::projTransform(){
    //fov window, ra window (anchura / altura), near, far
    glm::mat4 Proj = glm::perspective(M_PI/1.3, 1.0, 0.2, 3000.0);
    glUniformMatrix4fv(projLoc,1,GL_FALSE, &Proj[0][0]);
}

void MyGLWidget::viewTransform(){
    //lookAt(OBS,VRP;UP)
    //glm::mat4 View = glm::lookAt(glm::vec3(0,0,10),glm::vec3(0,0,-2), glm::vec3(0,1,0));
    glm::mat4 View = glm::lookAt(glm::vec3(xObs,yObs,zObs),glm::vec3(xVRP,yVRP,zVRP), glm::vec3(0,1,0));
    glUniformMatrix4fv(viewLoc,1,GL_FALSE, &View[0][0]);
}

最佳答案

假设Obs为摄像机位置,VRP为观察位置:

r = ||VRP - Obs||

                  r * cos(angle)
VRP_new = Obs + [     0          ]
                  r * sin(angle)

由于稍后可能需要第二个旋转轴,因此建议为相机使用以下参数:位置 vector t和两个 Angular ,分别描述围绕x和y轴[rx,ry]的旋转。可以将它们组合到每一帧中以获得Obs和VRP,但这并不是真正必要的,因为可以直接从此参数派生 View 矩阵:
V = T(t) * R_y(ry) * R_x(rx),

其中T是平移矩阵,R_x,R_y是旋转矩阵。根据您的表示法,可能需要反转 View 矩阵。

关于c++ - 第一人称摄影机,转过OPENGL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33125588/

10-10 03:43