Как ограничить rotation объекта в three.js?

194
06 апреля 2017, 20:07

Я загрузил и вывел объект, подключил управление с помощью trackballcontrols.

Мне нужно, что бы при манипуляциях мышкой объект крутился только по оси Х, а все остальные оси, зум, перенос объекта с помощью пкм были отключены.

Как это сделать? Возможно в trackballcontrols можно как то поменять методы для этого. Спасибо!

controls = new THREE.TrackballControls( camera );
controls.rotateSpeed = 10;
controls.noZoom = true;
controls.noPan = true;
Answer 1

Нашел решение, легко кастомизируется.

https://jsfiddle.net/MadLittleMods/n6u6asza/

var isDragging = false;

var previousMousePosition = { x: 0, y: 0 }; $(renderer.domElement).on('mousedown', function(e) { isDragging = true; }) .on('mousemove', function(e) { //console.log(e); var deltaMove = { x: e.offsetX-previousMousePosition.x, y: e.offsetY-previousMousePosition.y };

if(isDragging) {
    var deltaRotationQuaternion = new three.Quaternion()
        .setFromEuler(new three.Euler(
            toRadians(deltaMove.y * 0),
            toRadians(deltaMove.x * 1),
            0,
            'XYZ'
        ));
    cube.quaternion.multiplyQuaternions(deltaRotationQuaternion, cube.quaternion);
}
previousMousePosition = {
    x: e.offsetX,
    y: e.offsetY
};});

$(document).on('mouseup', function(e) {
isDragging = false;});
READ ALSO
Не работает часть программы в javascript

Не работает часть программы в javascript

alert(d / c) не работает, выводит белый экран

205
Задержка в выводе текста

Задержка в выводе текста

При нажимании на клавишу - должно выводить в консоль содержимое поля ввода, но на самом деле выводит на один символ меньше, чем нужно

226
Работа с массивом объектов

Работа с массивом объектов

Есть массив объектов, нужно чтобы при клике на кнопку, в этот массив записывался объект, а на повторный клик, удалялся из массива

153
node.js получаю неверный ответ на запрос get

node.js получаю неверный ответ на запрос get

Клиент шлет запрос получить весь список, вместо списка или ошибки получаю ответ:

356