第一人称相机,旋转OPENGL
first person camera, turning around OPENGL
我有一个带有Obs和VRP和Up矢量的透视相机。
我想在我的场景中实现像观察者一样的转身。我已经实现了向前和向后,因为它只添加相同数量的z坐标到Obs和VRP(都是vec3)。当我尝试实现旋转时,问题来了,有什么方法可以用矩阵乘积来做吗?我试过了:
x = R * cos角
z = R * sin角
其中R是矢量(VRP - Obs)的大小,但它不起作用
编辑:我在这里应用视图和投影矩阵: 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)
因为你以后可能想要有第二个旋转轴,我建议为相机设置以下参数:一个位置向量t和两个描述围绕x和y轴[rx, ry]旋转的角度。我们可以在每一帧中结合它们来获得Obs和VRP,但这并不是必需的,因为视图矩阵可以直接从这些参数中导出:
V = T(t) * R_y(ry) * R_x(rx),
,其中T为平移矩阵,R_x, R_y为旋转矩阵。根据您的表示法,视图矩阵可能需要反转
相关文章:
- 发布旋转矩阵(openGL/glm)
- 如何在OpenGL中正确旋转和缩放对象?
- 使用 C++在 OpenGL 中移动自动旋转的 3D 多边形
- 按时间自动旋转形状,同时在 OpenGL 中使用C++移动它们
- 如何在 openGL 中围绕全局轴旋转模型?
- 如何在 opengl 中仅旋转特定对象而不影响其他对象?
- 在OpenGL(GLM/C++)中使用四元数旋转时出现问题
- 鼠标单击 OpenGL 时无法围绕其自己的中心旋转对象
- Opengl 旋转不起作用
- Qt OpengL-旋转三维固定场景
- openGL旋转重置
- OpenGL - 旋转玩家位置以面对鼠标指针
- 创建一个围绕对象 OpenGL C++旋转的相机
- OpenGL旋转-局部轴与全局轴
- OpenGL旋转相机
- OpenGL 旋转问题
- OpenGL旋转的问题
- Opengl旋转一个已经在旋转的物体,就像地球月球旋转一样
- 我可以在用OpenGL旋转正方形后获得它的顶点吗
- 为什么这个OpenGL旋转也会翻译我的对象