我目前有一个水晶球界面摄像机设置,摄像机总是在看原点,按左,右,上,下只需在物体周围移动。
我想更改此设置,以便相机可以在3D环境中自由移动。
我目前有两个功能,LEFT和UP,已经实现为我提到的CB接口。
我希望左右键可左/右,而上/下可上升并下沉相机。我究竟该如何改变呢?
另外......向前和向后移动相机的正确方法是什么?我想也许拖动鼠标等于移动foward / back?
void Transform::left(float degrees, vec3& eye, vec3& up) {
eye = eye*rotate(degrees, up);
}
void Transform::up(float degrees, vec3& eye, vec3& up) {
vec3 ortho_axis = glm::cross(eye, up);
ortho_axis = glm::normalize(ortho_axis);
eye = eye*rotate(degrees, ortho_axis);
up = up*rotate(degrees, ortho_axis);
}
答案 0 :(得分:1)
基本上扔掉整个代码并重新开始。场景中的摄像头与任何其他对象一样,因此具有位置和方向。 (或者一个变换矩阵。)您需要做的就是应用相机变换的相反方向。
glTransformf(-camera.x, -camera.y, -camera.z);
glRotatef(-camera.angle, camera.axis.x, camera.axis.y, camera.axis.z);
你明白了。
我在代码中所做的是,因为我有旋转的四元数并将其转换为矩阵或轴&角度很贵,我计算摄像机的向前和向上矢量并将其输入gluLookAt。
Vector3f f = transform(camera.orientation, Vector3f(1, 0, 0));
Vector3f u = transform(camera.orientation, Vector3f(0, 0, 1));
Vector3f p = camera.position;
Vector3f c = p + f;
gluLookAt(p.x, p.y, p.z, c.x, c.y, c.z, u.x, u.y. u.z);
答案 1 :(得分:0)
FPS控制的一个常见设置是将动作绑定到键(Strafe左/右,前进/后退)和环顾鼠标左右(x轴:左/右旋转,y轴:俯仰/向下)。
HTH