three.js:结合tween.js绕世界轴旋转对象

好天气

我目前正在尝试以3D方式对多维数据集进行补间旋转,这要归功于此文章(如何在轴世界Three.js上旋转对象?),无需补间就可以进行补间,而没有任何问题。因此,目前我正在尝试将setFromRotationMatrix完成的旋转转换为可以用作补间的最终旋转的东西。

编辑:

这是我目前所拥有的:

// function for rotation dice
function moveCube() {

    // reset parent object rotation
    pivot.rotation.set( 0, 0, 0 );
    pivot.updateMatrixWorld();
    // attach dice to pivot object
    THREE.SceneUtils.attach( dice, scene, pivot );

    // set variables for rotation direction
    var rotateZ = -1;
    var rotateX = -1;
    if (targetRotationX < 0) {
        rotateZ = 1;
    } else if (targetRotationY < 0) {
        rotateX = 1;
    }

    // check what drag direction was higher
    if (Math.abs(targetRotationX) > Math.abs(targetRotationY)) {
            // rotation
            var newPosRotate = {z: rotateZ * (Math.PI / 2)};
            new TWEEN.Tween(pivot.rotation)
                .to(newPosRotate, 2000)
                .easing(TWEEN.Easing.Sinusoidal.InOut)
                .start();
            //rotateAroundWorldAxis(dice, new THREE.Vector3(0, 0, rotateZ), Math.PI / 2);
    } else {
            // rotation
            var newPosRotate = {x: -rotateX * (Math.PI / 2)};
            new TWEEN.Tween(pivot.rotation)
                .to(newPosRotate, 2000)
                .easing(TWEEN.Easing.Sinusoidal.InOut)
                .start();
            //rotateAroundWorldAxis(dice, new THREE.Vector3(-rotateX, 0, 0), Math.PI / 2);
    }

    // detach dice from parent object
    THREE.SceneUtils.detach( dice, pivot, scene );
}

多亏了WestLangley,我认为我终于可以解决一个易于实现的解决方案,并且可以满足我的目的。初始化枢轴对象时,我将其设置为与骰子完全相同的位置,因此旋转仍将围绕骰子的中心。

var loader = new THREE.JSONLoader();
loader.load(
    'models/dice.json',
    function ( geometry, materials ) {
        material = new THREE.MeshFaceMaterial( materials );
        dice = new THREE.Mesh( geometry, material );
        dice.scale.set(1.95, 1.95, 1.95);
        dice.position.set(2.88, 0.98, 0.96);
        scene.add( dice );

        pivot = new THREE.Object3D();
        pivot.rotation.set( 0, 0, 0 );
        pivot.position.set(dice.position.x, dice.position.y, dice.position.z);
        scene.add( pivot );
    }
);

我有atm(上部代码段)的解决方案没有将骰子作为父项附加到枢轴对象。我可能忽略了一些非常基本的内容...

编辑结束

好天气

正如我认为的那样,要使其正常工作,我必须要做的是一件非常简单的事情:

我只需要将子对象(骰子)的分离移动到函数的开头,而不是将其放在函数的末尾即可。

这是工作代码:

// function for rotating dice
function moveCube() {
    // detach dice from parent object first or attaching child object won't work as expected
    THREE.SceneUtils.detach( dice, pivot, scene );
    // reset parent object rotation
    pivot.rotation.set( 0, 0, 0 );
    pivot.updateMatrixWorld();
    // attach dice to pivot object
    THREE.SceneUtils.attach( dice, scene, pivot );

    // set variables for rotation direction
    var rotateZ = -1;
    var rotateX = -1;
    if (targetRotationX < 0) {
        rotateZ = 1;
    } else if (targetRotationY < 0) {
        rotateX = 1;
    }

    // check what drag direction was higher
    if (Math.abs(targetRotationX) > Math.abs(targetRotationY)) {
            // rotation
            var newPosRotate = {z: rotateZ * (Math.PI / 2)};
            new TWEEN.Tween(pivot.rotation)
                .to(newPosRotate, 2000)
                .easing(TWEEN.Easing.Sinusoidal.InOut)
                .start();
    } else {
            // rotation
            var newPosRotate = {x: -rotateX * (Math.PI / 2)};
            new TWEEN.Tween(pivot.rotation)
                .to(newPosRotate, 2000)
                .easing(TWEEN.Easing.Sinusoidal.InOut)
                .start();
    }
}

非常感谢您的帮助!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

围绕对象轴THREE.js旋转对象

来自分类Dev

three.js通过轴方向旋转对象

来自分类Dev

Three.js-围绕特定轴旋转对象

来自分类Dev

在three.js中绕圆旋转线

来自分类Dev

Three.js-设置对象从X轴,Y轴和Z轴的标准化方向旋转

来自分类Dev

three.js-设置对象相对于其自身轴的旋转

来自分类Dev

使用tween.js和three.js错误地平滑旋转

来自分类Dev

three.js旋转面向对象

来自分类Dev

在Three.js的中心旋转mergeometry对象

来自分类Dev

在three.js中旋转对象

来自分类Dev

将A框架与Three.js结合

来自分类Dev

Three.js旋转

来自分类Dev

如何在Three.js中绕立方体旋转球体

来自分类Dev

Three.js + Tween.js 补间多个对象的顶点

来自分类Dev

Three.js-围绕轴旋转Object3D

来自分类Dev

当对象旋转时Three.js旋转相机

来自分类Dev

如何获得对象的世界位置(Three.js)

来自分类Dev

使用Three.js,WebGL显示对象的顶点并旋转对象

来自分类Dev

使用Three.js,WebGL显示对象的顶点并旋转对象

来自分类Dev

结合Three.js和Easel.js

来自分类Dev

如何在WebGL和Three.js和Tween.js中创建一个不断增长的对象

来自分类Dev

three.js通过鼠标向下旋转对象并移动

来自分类Dev

Three.js:添加和删除旋转对象的子代

来自分类Dev

Three.JS通过移动设备围绕对象旋转相机

来自分类Dev

Three.js通过圆路径旋转对象

来自分类Dev

Three.js:添加和删除旋转对象的子代

来自分类Dev

如何在Three.js中使用鼠标旋转对象?

来自分类Dev

Three.js 对象返回错误的位置/旋转/缩放值

来自分类Dev

将GLSL 3 ES与three.js结合使用