【问题标题】:Rotation about model's center after moving (pan) the model移动(平移)模型后围绕模型中心旋转
【发布时间】:2016-10-27 12:57:10
【问题描述】:

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

提前致谢。

【问题讨论】:

    标签: javascript three.js


    【解决方案1】:

    由于轨迹球控件旋转相机而不是网格。平移后旋转似乎很奇怪。所以不要使用轨迹球控件旋转基于四元数的网格。 在 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);
            }
    

    【讨论】:

    • 这已经是关于平移后围绕对象中心旋转。
    • 如果可能的话,您能否在 JS fiddle 中添加它,这会很有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    • 2013-11-15
    • 2014-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-08
    相关资源
    最近更新 更多