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",我们首先左右旋转,然后上下旋转,最后滚动,从而获得第一人称射击游戏所需的效果。
Thanks to WestLangley and dust_ in the Three.js IRC.
相关文章:
- Jpgraph:如何手动设置X轴和Y轴的范围
- NVD3.js多图形,具有固定的x轴和y轴
- css3旋转顶部和左侧坐标
- 使用javascript在三维中旋转文本和图片
- 高图 - 散点:设置 x 轴和 y 轴的小数
- 高图多个 y 轴和动态更新
- X 轴和 Y 轴打印日期
- d3.js如何区分 X 轴和 Y 轴
- 使用 jquery/ HTML 根据 x 轴和 y 轴显示图像
- JavaScript - 用于 x 轴和 y 轴上的循环
- 如何使完整的百万值显示在 y 轴和工具提示(高图表)上
- Dojo+Highcharts:showAxes属性移动x轴和y轴
- 在x轴和带时间刻度的直线之间添加空格
- 以下标和上标的形式在X轴和Y轴的高线图标题上显示内容
- 旋转图像和隐藏菜单
- 如何从条形图中删除轴和其他信息
- Highcharts:使X轴和Y轴在0处相交
- Three.js -当相机以90度角旋转时,为什么在x轴和z轴上旋转会产生相同的效果?
- D3分层条形图-旋转X轴和Y轴
- 如何在D3柱状图中旋转x轴和y轴