首页 文章

旋转像OrbitControls这样的对象,但只旋转对象本身

提问于
浏览
0

我们喜欢three.js!这是我们几年前使用它构建的页面 . https://www.jgprolock.com

我们正在修改此网站上的动画 .

页面加载后,用户可以拖动和旋转对象 . 但这真的是一招 . 我们使用轨道控制来围绕场景旋转摄像机,因此我们的主要对象位于场景中心(位置x,y,z都等于0) . 如果我们没有将物体放在中心,它的旋转开始变得不均匀,因为相机现在围绕物体没有的中心旋转 .

为了让它看起来像是在左侧的对象,我们最终将画布向左移动,然后我们将它向后移动到右边或左边,因为滚动后动画继续 .

所以,我的问题是..有没有人有一个例子如何通过旋转实际物体本身来实现这个功能,而不是使用轨道控制插件在整个场景周围旋转相机?

或者是否需要修改轨道控件以围绕对象而不是整个场景旋转?

1 回答

  • 0

    我一直在寻找这个问题,但在问这个问题之后我偶然发现了这个链接,它实际上有一个我们想要做的例子 . https://jsfiddle.net/n6u6asza/1205/

    使这项工作从链接复制的关键:(虽然我不是100%确定这一切意味着什么)

    /* */
    var isDragging = false;
    var previousMousePosition = {
        x: 0,
        y: 0
    };
    $(renderer.domElement).on('mousedown', function(e) {
        isDragging = true;
    })
    .on('mousemove', function(e) {
        //console.log(e);
        var deltaMove = {
            x: e.offsetX-previousMousePosition.x,
            y: e.offsetY-previousMousePosition.y
        };
    
        if(isDragging) {
    
            var deltaRotationQuaternion = new three.Quaternion()
                .setFromEuler(new three.Euler(
                    toRadians(deltaMove.y * 1),
                    toRadians(deltaMove.x * 1),
                    0,
                    'XYZ'
                ));
    
            cube.quaternion.multiplyQuaternions(deltaRotationQuaternion, cube.quaternion);
        }
    
        previousMousePosition = {
            x: e.offsetX,
            y: e.offsetY
        };
    });
    /* */
    

相关问题