2016-03-15 3 views
0

Есть ли простой способ смены поворота THREE.Object3D? Точка по умолчанию - это точка положения Object3d.Three.js - Есть простой способ изменить поворот вращения 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

вы не должны изменить положение, просто создать матрицу, которая делает то, что вы хотите:

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); 
+0

сделали вы имели в виду: THREE.Matrix4 во всех линиях? во всяком случае, это вызывает изменение позиции объектов под группой или положение самой группы. – RoeePeleg

+0

смотрите мой вопрос редактирование. – RoeePeleg

+0

Да, я хотел использовать матрицы, он меняет положение, я, вероятно, неправильно понял ваш вопрос - вы не хотите менять позицию после вращения? в этом случае сделайте вектор поворота [0,0,0], и он будет вращаться вокруг центра или если по какой-то причине у вас есть матрица вращения, которую вы хотите использовать, - используйте ее и переместите группу обратно в прежний центр. –