围绕OpenGL中XZ平面上的点旋转相机

问题描述 投票:0回答:1

我正在尝试在OpenGL中实现可移动和旋转的相机。我希望摄像机绕XZ平面上当前正在查看的点(即Y朝上)旋转(即XZ平面与摄像机方向的交点)。什么是实现这一目标的最佳方法?

opengl 3d camera rotation
1个回答
0
投票

假设您要围绕P(x, 0, z)平面上的XZ点旋转相机

一种方法是调用glRotatef(theta, px, py, pz),它将当前矩阵乘以旋转矩阵(theta围绕矢量(px, py, pz)的角度旋转)

由于要绕任意点而不是原点旋转,因此需要首先平移轴:

glTranslatef(x, 0, z);
glRotatef(thetax, 1, 0, 0);
glRotatef(thetay, 0, 1, 0);
glRotatef(thetaz, 0, 0, 1);
glTranslatef(-x, 0, -z);

或者,您可以使用gluLookAt(cx, cy, cz, px, py, pz, ux, uy, uz),它为(cx, cy, cz)处的摄像机创建一个视图矩阵,该矩阵以(px, py, pz)为指向“上”(摄像机的方向)的矢量,在(ux, uy, uz)处看到]

我想您希望摄像机到您的点的距离保持静态,因此在球坐标系中表示摄像机的坐标会很方便

x = rsin(θ)cos(φ)

y = rsin(θ)sin(φ)

z = rcos(θ)

© www.soinside.com 2019 - 2024. All rights reserved.