如何使相机朝着它在java中面向的方向移动?

时间:2013-08-10 02:57:08

标签: java camera rotation direction

我需要一种方法(在java中)根据我的相机所面向的方向(偏航)计算我的相机在x和z轴上向前移动的方向,以及y(垂直轴),音高。我正在制作自己的游戏引擎和我自己的相机。

如果所有值默认为零,则正确移动相机会指示沿正z轴的所有移动。但是,当我向左或向右平移摄像机(从而改变偏航)时,摄像机仍然只沿z轴移动...那么如何计算x,y和z轴方向的变化?

偏航的值范围是0(南),45(西南),90(西),135(西北),180(北),225(东北),270(东),315(东南),然后回到360(南,同0)。

我正在寻找罗盘方向(其中'+'或' - '表示沿该轴的值发生变化):

South = x, y, z+
SouthWest = x+, y, z+
West = x+, y, z
NorthWest = x+, y, z-
North = x, y, z-
NorthEast = x-, y, z-
East = x-, y, z
SouthEast = x-, y, z+

音高上的数值范围是0.0(中间),100.0(一直向上)和-100.0(向下一直)。

如果我需要发布一些代码,我可以,但它可能会变得复杂。我希望我有某种意义,以便有人可以帮助我!

1 个答案:

答案 0 :(得分:1)

假设您想要使用 k 距离 y 移动相机。 为了简单起见,我将你的方向转换为角度,其中0.0表示右,Pi / 2表示向上,Pi表示向左,3 * Pi / 2表示向下等等。

编辑:正如你所说,相机的y只会受到音高的影响。相反,X和z将受到偏航和俯仰的影响。

您可以通过以下方式计算新的x,y和z:

float y = // Yaw angle
float p = // Pitch angle
float k = // Move distance

float xzLength = cos(p) * k;
float dx = xzLength * cos(y);
float dz = xzLength * sin(y);
float dy = k * sin(p);

// Update your camera:
camera.x += dx;
camera.y += dy;
camera.z += dz;

显然,偏航和俯仰不会改变,所以你不需要更新它们。