【问题标题】:Sync Object3d rotation (tab level)同步 Object3d 旋转(选项卡级别)
【发布时间】:2019-01-17 00:04:26
【问题描述】:

需要帮助,

我正在尝试将活动浏览器选项卡中加载的一个对象的旋转与第二个选项卡中加载的另一个对象同步。在活动浏览器选项卡中加载的旋转对象将向另一个对象发送消息。在第二个选项卡中,将侦听从第一个选项卡发送的消息,并使用旋转值相应地旋转对象。我的代码如下所示,(我提到了this 示例)

 let objectLoaded;
 let previousMousePosition = {x : 0,  y : 0 };
    function mouseDown(e) {
        isDragging = true;
    }

    function mouseUp() {
        isDragging = false;
        if (objectLoaded) {
            // publishing the rotation value to another tab using 'hermes' package.
            hermes.send('rotation', JSON.stringify({
                rotation: objectLoaded.rotation,
                quaternion: objectLoaded.getWorldQuaternion(),
                matrix: objectLoaded.matrixWorld
            })); 
        }
    }

    function mouseMove(e) {
        const deltaMove = { x : e.offsetX - previousMousePosition.x,y : e.offsetY - previousMousePosition.y };         
        if (isDragging && objectLoaded) {
            const deltaRotationQuaternion = new THREE.Quaternion().setFromEuler(new THREE.Euler(toRadians(deltaMove.y * 1), toRadians(deltaMove.x * 1), 0, 'XYZ'));
            objectLoaded.quaternion.multiplyQuaternions(deltaRotationQuaternion, objectLoaded.quaternion);
        }
        previousMousePosition = {x : e.offsetX,  y : e.offsetY };
    }

    function toRadians(angle) {
         return angle * (Math.PI / 180);
    }

监听代码,

  hermes.on('rotation', (rotationObj) => {
  // rotationObj structure: {rotation: { _x: 0, _y: 0: _z: 0}, quaternion: { _x: 0, _y: 0: _z: 0, _w: 0}}
      const target = JSON.parse(rotationObj);
      SecondObject.rotateX(target.rotation._x);
      SecondObject.rotateY(target.rotation._y);
      SecondObject.rotateZ(target.rotation._z);
 })

这里的问题是第二个对象没有与第一个对象正确同步。有谁知道我做错了什么?

谢谢,

【问题讨论】:

    标签: javascript three.js rotation


    【解决方案1】:

    在一个选项卡中,您请求当前(绝对)旋转。在另一个中,您将 addition 中的这些值旋转到当前旋转。这将在您第一次设置非零旋转后立即中断。

    你想要的是分配旋转,通过做

    SecondObject.rotation.copy(target.rotation);
    

    【讨论】:

    • 非常感谢。你拯救了我的一天。
    • 同步问题依然存在。如果我以不同的角度旋转两次以上,第二个对象就会不同步。
    • 其实我做错了。我正在使用带有 controls.enableRotate = true 的轨道控制;应该是假的。
    猜你喜欢
    • 2023-03-29
    • 1970-01-01
    • 2015-06-15
    • 1970-01-01
    • 2012-02-29
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多