根据摄像机方向移动

时间:2014-06-01 10:18:23

标签: opengl camera

我正在使用以下方式旋转相机(当相机位于(0,0,0)时):

glRotatef(x_camera_angle, 1.0, 0.0, 0.0);
glRotatef(y_camera_angle, 0.0, 1.0, 0.0);

我希望将相机朝着它的方向移动,并根据相机方向移动物体(例如,将物体移动到相机并远离相机)。

我已尝试使用此处指定的模型视图矩阵来实现此目的:https://stackoverflow.com/a/16137191/3362159,但这似乎不起作用。例如,我尝试使用以下代码向前移动相机(根据其方向):

glTranslatef(front[0] * units_forward, front[1] * units_forward, front[2] * units_forward);

其中"前面"是答案中指定的矩阵。相机不会向前移动,它会根据方向的不同而移动。

我做错了什么?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您是否尝试过glTranslatef(0,0,units_forward)?那可能是你期望的吗?

混淆的根本原因是矩阵的工作原理。 gl(Matrix)函数都将当前矩阵与它们构建的矩阵相乘。正如凯尔塔尔在左侧纠正。关于矩阵的一个奇怪的事情是A * B!= B * A.通常,产品的右侧首先发生"。因此,如果A是旋转而B是向前移动,则A * B表示"向前移动然后围绕我移动到的点#&34;而B * A表示"旋转然后向前移动,我们现在指向前方"。

您引用的答案采用了一个不太有用的快捷方式。

您总是有两个选择:

  • gl(操作)左移
  • glGet(tempmatrix),glLoadIdentity()gl(操作)glMultMatrix(tempmatrix)正确倍增

试试两个!看看他们是如何不同的。只需操作=翻译和(0,0,金额),其中一个就能做你想做的事。