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

在java中,如何使相机朝着它所面对的方向移动?,java,camera,rotation,direction,Java,Camera,Rotation,Direction,我需要一种方法(在java中)来计算我的相机将在x轴和z轴上向前移动的方向,该方向基于我的相机面对的方向(偏航),而对于y轴(垂直轴),则基于俯仰。我正在制作自己的游戏引擎和相机 在所有值默认为零的情况下,移动摄影机将正确引导沿正z轴的所有移动。但是,当我向左或向右平移相机(从而改变偏航)时,相机仍然只沿z轴移动。。。那么如何计算x、y和z轴方向的变化呢 偏航的值范围为0(南)、45(西南)、90(西)、135(西北)、180(北)、225(东北)、270(东)、315(东南)和360(南,与0

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

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

偏航的值范围为0(南)、45(西南)、90(西)、135(西北)、180(北)、225(东北)、270(东)、315(东南)和360(南,与0相同)

我在寻找指南针方向(其中“+”或“-”表示沿该轴的值发生变化):

俯仰上的值范围为0.0(中间)、100.0(一直向上)和-100.0(一直向下)


如果我需要发布一些代码,我可以,但它可能会变得复杂。我希望我有点道理,这样有人能帮助我

假设要沿y方向移动相机,距离为k。 为了简单起见,我将把方向转换成角度,其中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;

显然,偏航和俯仰不会改变,因此您不需要更新它们。

假设您希望将相机沿y方向移动距离k。 为了简单起见,我将把方向转换成角度,其中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;

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

太好了,我会尽快调查!一个简单的问题,如果我真的想把俯仰(上下运动)分解成一个“飞行”相机的x和z值,我该怎么做?我想在我的解决方案中,俯仰实际上分解成x和z,正如你所看到的,xzLength依赖于p和dz,dx依赖于它,我误解了你的问题吗?相反,如果你不想在x和z中考虑俯仰,你应该让xzLength=k代替抱歉,我的陈述中的一个错误让你相信x和z只受偏航的影响,编辑!当你说角度时,你的意思是像0-360一样,还是不同的数值?我这样问是因为我将旋转(偏航)和上下(俯仰)值转换为返回角度值,但您的方法只起作用。当我进一步平移摄影机时,依次增加旋转(偏航)和向右旋转摄影机,摄影机开始向左和向后移动,有时向右移动。我真的希望这是我的一个错误,但也许你能发现一些错误。无论如何谢谢你的帮助!太好了,我会尽快调查的!一个简单的问题,如果我真的想把俯仰(上下运动)分解成一个“飞行”相机的x和z值,我该怎么做?我想在我的解决方案中,俯仰实际上分解成x和z,正如你所看到的,xzLength依赖于p和dz,dx依赖于它,我误解了你的问题吗?相反,如果你不想在x和z中考虑俯仰,你应该让xzLength=k代替抱歉,我的陈述中的一个错误让你相信x和z只受偏航的影响,编辑!当你说角度时,你的意思是像0-360一样,还是不同的数值?我这样问是因为我将旋转(偏航)和上下(俯仰)值转换为返回角度值,但您的方法只起作用。当我进一步平移摄影机时,依次增加旋转(偏航)和向右旋转摄影机,摄影机开始向左和向后移动,有时向右移动。我真的希望这是我的一个错误,但也许你能发现一些错误。无论如何谢谢你的帮助!