三.js相机旋转顺序
Three.js camera rotation order
我正在尝试使用游戏手柄在Three.js中旋转摄像机,使用第一人称射击风格的控件。
浏览器检测到游戏手柄并识别其输入,但相机的旋转顺序是错误的。当我在相机的本地Y轴上旋转时,它也考虑了本地X旋转,这是不需要的。
- 我想要的:http://jsfiddle.net/fYtwf/3/
- 正在发生的事情:http://jsfiddle.net/fYtwf/2/
似乎我和这个人遇到了同样的问题,但他的问题使用 Three.js r54 解决了,而我使用的是 r60。他设置了camera.eulerOrder = "YXZ";
让它工作,但目前的等效camera.rotation.order = "YXZ";
似乎不适合我。
我知道 Three.js 的内置"FirstPersonControls"类,但它不适合我,因为它不接受控制器输入,以后将其他非移动控件硬塞进去会很麻烦。我也知道游戏手柄.js并且对使用它没有兴趣。
谁能帮忙?
我的轮换代码:
function pollGamepad()
{
gamepad = navigator.webkitGetGamepads()[0];
//Rotation
if(gamepad.axes[3] > 0.20)
{
camera.rotateX(-gamepad.axes[3] * 0.02);
}
if(gamepad.axes[3] < -0.20)
{
camera.rotateX(-gamepad.axes[3] * 0.02);
}
if(gamepad.axes[2] < -0.20)
{
camera.rotateY(-gamepad.axes[2] * 0.02);
}
if(gamepad.axes[2] > 0.20)
{
camera.rotateY(-gamepad.axes[2] * 0.02);
}
}
PointerLockControls
使用的方法是创建对象的层次结构:yawObject
包含pitchObject
包含camera
。然后水平鼠标(或操纵杆)移动将改变偏航对象的 Y 旋转,垂直鼠标(或操纵杆)移动将改变俯仰对象的 X 旋转,相机的旋转将固定在默认(0, 0, -1)
。这只是手动模拟欧拉YXZ
排序,但它可能对您更好。如果您需要获得整体旋转,它确实会产生一些尴尬。
在我最近编写的自定义控制器中,我通过将相机add()
到单个父对象并将父对象的欧拉顺序设置为 YXZ
来获得相同的结果。我不记得为什么这比直接在相机上设置更好,但它确实如此。
我自己也遇到了这个问题,我想出了一个简单的解决方案。在执行 y 旋转之前,始终将相机的 x 旋转重置为零。然后,恢复 x 旋转。所以:
// Rotate camera Fps style
function rotateCamera(dx,dy){
//store previous x rotation
var x = camera.rotation.x;
//reset camera's x rotation.
camera.rotateX(-x);
//rotate camera on y axis
camera.rotateY(dy);
//check if we are trying to look to high or too low
if ( Math.abs( dx + x ) > Math.Pi/2 - 0.05) {
camera.rotateX(x);
else
camera.rotateX(x+dx);
//reset z rotation. Floating point operations might change z rotation during the above operations.
camera.rotation.z = 0;
}
- ajax请求的顺序总是不同的
- 知道为什么我的旋转木马不会自动更改图片吗
- 按照选项卡索引的顺序循环一个jQuery选择
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 按顺序添加和删除类
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript-根据赋值顺序,按键合并对象数组
- 顺时针旋转Svg元件
- 将鼠标旋转限制为特定的度数
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- querySelector/getElementByClassName嵌套项的顺序
- 旋转后拖动对象
- 三.js相机旋转顺序
- 旋转后保持z索引顺序
- 使用jQuery旋转顺序
- 如何使用jQuery旋转HTML内容,使顺序每30秒改变一次
- 引导旋转木马指示不按正确顺序循环
- 图像旋转器脚本没有按顺序运行
- 将随机Javascript更改为按顺序旋转
- 未捕获的错误:3.Quaternion: . setfromeuler()现在期望欧拉旋转而不是Vector3和顺序