在Three.js中任意位置的特定轴上旋转对象-包括网格外部
试图绕任何轴旋转对象。
例如,像门铰链(在物体边缘)或围绕太阳的行星(在物体外部)。
问题似乎在定义轴。下面的单位向量导致轴保留在对象的原点(中心)上,与标准旋转相同:
object2.rotateOnAxis(new THREE.Vector3(1,0,0), 0.01);// same as
object1.rotation.x += 0.01;
寻找一种无需使用嵌套子项即可绕枢轴旋转的方法。旋转孩子的父母可以方便地操作孩子的枢轴点,但是修改枢轴点是不可行的。
在下面的示例中,如果您想以图8的运动旋转立方体,则可以通过更改父对象来使用此方法来实现。但是,必须确保精确配置了新父母的位置和方向,以使孩子在父母之间无缝地跳跃,而且不重复或不循环的复杂动作将非常复杂。取而代之的是,我想(并且我将用问题标题来解释)在特定轴上旋转对象,而无需在场景中的任何位置(包括对象网格外部)使用对象嵌套。
回答:
如果要围绕世界空间中的任意线旋转对象,可以使用以下方法。该线由3D point
和方向矢量(axis
)指定。
THREE.Object3D.prototype.rotateAroundWorldAxis = function() { // rotate object around axis in world space (the axis passes through point)
// axis is assumed to be normalized
// assumes object does not have a rotated parent
var q = new THREE.Quaternion();
return function rotateAroundWorldAxis( point, axis, angle ) {
q.setFromAxisAngle( axis, angle );
this.applyQuaternion( q );
this.position.sub( point );
this.position.applyQuaternion( q );
this.position.add( point );
return this;
}
}();
three.js" title="three.js">three.js r.85
以上是 在Three.js中任意位置的特定轴上旋转对象-包括网格外部 的全部内容, 来源链接: utcz.com/qa/432257.html