移动(平移)模型后围绕模型的中心旋转

时间:2016-09-16 10:55:40

标签: javascript three.js

我使用Three.js使用JSONLoader加载JSON模型。我也使用TrackballControls.js进行基本交互。如果我移动(PAN)对象,旋转的工作方式会有所不同。如何在移动(PAN)后将旋转更改为模型的中心?

提前致谢。

1 个答案:

答案 0 :(得分:2)

由于轨迹球控件旋转相机而不是网格。平移后旋转似乎很奇怪。因此,不使用轨迹球控制,而是根据四元数旋转网格。 在mousemove事件中包含此代码

trackBallControls.noRotate = true;
            if (isDragging === true) {
                var deltaMove = {
                    x: event.offsetX -previousMousePosition.x,
                    y: event.offsetY -previousMousePosition.y
                };
                var deltaRotationQuaternion = new THREE.Quaternion()
                        .setFromEuler(new THREE.Euler(toRadians(deltaMove.y * 0.3),
                                toRadians(deltaMove.x * 0.3),
                                0,
                                'XYZ'
                                ));
                if (event.which === 1) {
                    mesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, mesh.quaternion);
                }
            }
            previousMousePosition = {
                x: event.offsetX,
                y: event.offsetY
            };

在鼠标注册事件中,设置isDragging为false。 在mousedown中,设置isDragging为true。

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