1

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

在所有值默认为零的情况下,正确移动相机会沿正 z 轴引导所有移动。但是,当我将相机向左或向右平移(从而改变偏航角)时,相机仍然只沿 z 轴移动……那么如何计算 x、y 和 z 轴的方向变化呢?

yaw 的取值范围是 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(一直向下)。

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

4

1 回答 1

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;

显然,yaw 和 pitch 不会改变,所以你不需要更新它们。

于 2013-08-10T03:39:00.663 回答