是否有一种简单的方法可以更改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);
});
提前致谢!
答案 0 :(得分:0)
你不必改变位置,只需创建一个符合你想要的矩阵:
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);