2

我有一个Mesh嵌套在Object3D. 我想要做的是Object3D在拖动过程中在 x 和 y 轴上旋转,然后在释放旋转到内部Object3D后将旋转重置为 0、0、0 Mesh

我的方法可能完全错误,但它似乎适用于第一个乐章,但之后就中断了。我认为这可能与 Euler 订单有关。

我正在使用的代码是:

function mouseDown(e) {
    hold.x = e.pageX;
    hold.y = e.pageY;
    window.addEventListener('mousemove', mouseMove);
}

function mouseMove(e) {
    var diffX = e.pageX - hold.x;
    var diffY = e.pageY - hold.y;

    object.rotation.x = (diffY * 0.25) * RADIAN;
    object.rotation.y = (diffX * 0.25) * RADIAN;
}

function mouseUp() {
    window.removeEventListener('mousemove', mouseMove);

    cube.rotation.x += object.rotation.x;
    cube.rotation.y += object.rotation.y;

    object.rotation.x = 0;
    object.rotation.y = 0;
}

我还制作了一个 jsfiddle 来演示确切的问题:http: //jsfiddle.net/BJaju/4/

4

2 回答 2

4

要将父母的世界变换转移给孩子,您需要调用

child.applyMatrix( parent.matrixWorld );

所以在你的情况下,它会是

function mouseUp() {

    window.removeEventListener('mousemove', mouseMove);

    cube.applyMatrix( object.matrixWorld );

    object.rotation.x = 0;
    object.rotation.y = 0;

}

小提琴:http: //jsfiddle.net/BJaju/5/

三.js r.59

于 2013-08-08T04:00:08.843 回答
0

我能够使用四元数找到解决方案!

我有两个单独的转换,如下所示:baseQuaternion = (new THREE.Quaternion).setFromEuler(new THREE.Euler(-Math.PI / 2, 0, -Math.PI / 2 , 'XYZ'))

当相乘时,它们会合并和组合效果。myMesh.quaternion = baseQuaternion.clone().multiply((new THREE.Quaternion).setFromEuler(...

该视频有帮助: https ://www.udacity.com/course/viewer#!/c-cs291/l-124106599/m-175393413

于 2014-02-07T05:56:25.140 回答