【发布时间】:2017-05-22 01:34:28
【问题描述】:
可能是threejs的旋转问题没有9000,我只是想要有3个UI按钮,每次点击都可以在x,y和z方向上将对象增量旋转90度,这有多难?
使用 euler 的常规旋转方法会导致云台锁定,并且使用 quanternions 轴将随机翻转,其中 z 轴将在一个点或另一个点为 y 轴。
请看看我的工作演示:http://grutex.com/webgl/demos/help/
编辑:这里是旋转功能部分:
function z_rotate(){
var startAngle = 0;
var start = {angle: startAngle};
var end = {angle: startAngle + 90};
var lastAngle=0;
var tween = new TWEEN.Tween(start)
.to(end, 400)
.easing( TWEEN.Easing.Quadratic.Out )
.onUpdate(function(){
startAngle=this.angle;
my_object.rotateOnAxis(new THREE.Vector3(0,0,1),degreeToRadians(startAngle-lastAngle));
lastAngle=startAngle;
})
.start();
}
function x_rotate(){
var startAngle = 0;
var start = {angle: startAngle};
var end = {angle: startAngle + 90};
var lastAngle=0;
var tween = new TWEEN.Tween(start)
.to(end, 400)
.easing( TWEEN.Easing.Quadratic.Out )
.onUpdate(function(){
startAngle=this.angle;
my_object.rotateOnAxis(new THREE.Vector3(1,0,0),degreeToRadians(startAngle-lastAngle));
lastAngle=startAngle;
})
.start();
}
function y_rotate(){
var startAngle = 0;
var start = {angle: startAngle};
var end = {angle: startAngle + 90};
var lastAngle=0;
var tween = new TWEEN.Tween(start)
.to(end, 400)
.easing( TWEEN.Easing.Quadratic.Out )
.onUpdate(function(){
startAngle=this.angle;
my_object.rotateOnAxis(new THREE.Vector3(0,1,0),degreeToRadians(startAngle-lastAngle));
lastAngle=startAngle;
})
.start();
}
【问题讨论】:
-
欢迎来到 SO。请将您的代码添加到您的帖子中。提示:避免每帧调用
new。创建对象的一个实例并重复使用它。 -
研究this answer,并补间临时父对象的旋转。
-
@WestLangley 谢谢!,如果不是你,我会连续几天把头撞在墙上,你是我唯一希望回答我的人在 SO 上阅读了大量关于three.js 的答案,我将在下面发布调整后的代码
标签: three.js rotation quaternions