2013-10-15 7 views
1

Я пытаюсь повернуть объект вокруг оси мира. Я нашел этот вопрос: How to rotate a object on axis world three.js?Вращать объект вокруг оси мира

Но это не решило проблему с помощью этой функции:

var rotWorldMatrix; 

// Rotate an object around an arbitrary axis in world space  
function rotateAroundWorldAxis(object, axis, radians) { 
    rotWorldMatrix = new THREE.Matrix4(); 
    rotWorldMatrix.makeRotationAxis(axis.normalize(), radians); 
    rotWorldMatrix.multiplySelf(object.matrix);  // pre-multiply 
    object.matrix = rotWorldMatrix; 
    object.rotation.getRotationFromMatrix(object.matrix, object.scale); 
} 

multiplySelf и getRotationFromMatrix не определены (я получаю ошибку консоли). Как решить проблему?

Update

Я пытался использовать Quaternion, но это, кажется, не правильно себя вести. Я пытаюсь повернуть объект по клику пользователя, это функция, которую я написал:

function mouseUp(event) { 
    var x= event.clientX; 
    var y= event.clientY; 
    var dx= (x - xBegin); 
    var dy= (y - yBegin); 

    var quaternion= new THREE.Quaternion(); 
    quaternion.setFromAxisAngle(new THREE.Quaternion(dy,dx,0).normalize(),Math.sqrt(dx*dx+dy*dy)/250.0); 
    object.quaternion.multiplyQuaternions(quaternion,object.quaternion); 
} 

Он вращается правильно до тех пор, пока объект находится в вертикальном или горизонтальном положении, но если это для пример при 45 градусах от оси x, он вращается очень медленно и в обратном направлении щелчка.

ответ

6

До тех пор, пока объект не имеет повернутый родителя, вы можете вращать объект вокруг мира ось так:

var q = new THREE.Quaternion(); // create once and reuse 

q.setFromAxisAngle(axis, angle); // axis must be normalized, angle in radians 
object.quaternion.premultiply(q); 

Three.js R.78

+0

Спасибо за Ответить. Можете ли вы увидеть мое редактирование? Я попытался использовать Quaternion для поворота объектов одновременно вокруг оси x и y (в соответствии с жестом пользователя), но он не поворачивает объект правильно. –

+0

Пожалуйста, не изменяйте вопрос после его ответа. Я ответил на ваш первоначальный вопрос. Пожалуйста, примите этот ответ, и если у вас возникнут дополнительные проблемы, сделайте новую запись ... Я надеюсь, что вы сами сможете решить проблему, так или иначе, - вы проходите в «Quaternion», где вы должны проходить в ' Vector3'. – WestLangley

Смежные вопросы