繁体   English   中英

Three.js-当相机旋转90度角时,为什么在x轴和z轴上旋转具有相同的效果?

[英]Three.js - When the camera is rotated at a 90 degree angle, why does rotating on the x axis and z axis have the same effect?

我正在构建第一人称射击游戏的基础,因此我可以理解一切的工作原理,主要是3D数学。

我遇到了只能使用Three.js复制的问题。

当照相机沿y轴旋转90度(向左看)时,在x轴和z轴上旋转具有相同的效果,似乎可以“滚动”照相机...

为什么会这样呢? 为什么不通过x轴旋转会导致相机“滚动”,而通过z轴旋转会导致相机向上和向下查看?

我有一个发生这种情况的示例,“问题”并不特定于此示例(使用向上和向下箭头键旋转):

沿x轴旋转: http : //duct.tk/gl/minimal/x.html来源: http : //duct.tk/gl/minimal/js/code-x.js

沿z轴旋转: http : //duct.tk/gl/minimal/z.html来源: http : //duct.tk/gl/minimal/js/code-z.js

在两个示例中,唯一的变化是:

通过x轴旋转时:

camera.rotation.x += degToRad(upRot);

通过z轴旋转时:

camera.rotation.z += degToRad(upRot);

事实证明,有一个非常简单的解决方案。

创建相机后添加以下代码行:

camera.eulerOrder = "YXZ";

该问题是由于Three.js旋转相机或任何其他对象的方式引起的。 Three.js旋转与对象的其他轴相关,这意味着z轴(默认情况下)将取决于y轴,而y轴将取决于x轴。

默认的eulerOrder为“ XYZ”。 这意味着在不更改y轴的情况下旋转x轴而不是z轴不会有不同的效果。

通过将eulerOrder更改为“ YXZ”,首先我们并排旋转,然后上下旋转,最后滚动,为第一人称射击游戏提供所需的效果。

感谢Three.js IRC中的WestLangley和dust_。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM