gpt4 book ai didi

c++ - 第一人称相机,转身 OPENGL

转载 作者:太空狗 更新时间:2023-10-29 23:00:41 26 4
gpt4 key购买 nike

我有一台带 Obs、VRP 和向上 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 和两个描述绕 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com