三.js - 有没有一种简单的方法来更改 Object3D 的旋转枢轴

Three.js - Is there a simple way to change rotation-pivot of Object3D?

本文关键字:方法 Object3D 旋转 简单 有没有 js 一种      更新时间:2023-09-26

有没有一种简单的方法来更改THREE.Object3D的旋转枢轴?默认点是Object3d的位置点。

我有一组(实现为 THREE.Object3D 个)对象,我想围绕THREE.Vector3可以在运行时更改的点将所有对象旋转在一起。

注意:组的位置无法更改。

我已经尝试过这个(在 Derte Trdelnik 的帮助下),但它不起作用:

someButton.onClick(function () {
    var object = editor.selected;
    if (!object instanceof THREE.Object3D) return;
    var pivot = new THREE.Vector3(100, 0, 0);
    var vectorToPivot = object.position.sub(pivot);
    var moveToPivot = new THREE.Matrix4().makeTranslation(vectorToPivot.x,
                                                          vectorToPivot.y, vectorToPivot.z);
    var rotation = new THREE.Matrix4().makeRotationZ(Math.PI);
    var inverseMove = new THREE.Matrix4().makeTranslation(-vectorToPivot.x,-vectorToPivot.y, -vectorToPivot.z);
    var matrix = inverseMove.clone().multiply(rotation).multiply(moveToPivot);
    object.applyMatrix(matrix);
    editor.signals.objectChanged.dispatch(object);
});

提前感谢!

你不必改变位置,只需创建一个你想要的矩阵:

var vectorToPivot = object.position.sub(pivot);
var moveToPivot = new THREE.Matrix4().makeTranslation(vectorToPivot.x, 
                                                      vectorToPivot.y,vectorToPivot.z);
var rotation = new THREE.Matrix().makeRotationX(Math.PI/2);
var inverseMove = new THREE.Matrix().makeTranslation(-vectorToPivot.x,
                                                     -vectorToPivot.y,-vectorToPivot.z);
var matrix = inverseMove.clone().multiply(rotation).multiply(moveToPivot);
object.applyMatrix(matrix);