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

Пользователь

от richard , в категории: JavaScript , год назад

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

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

1 ответ

Пользователь

от shirley.vonrueden , год назад

@richard 

В three.js можно ограничить вращение объекта, используя свойство Object3D.rotation и метод Object3D.rotateOnAxis.


Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// Создание объекта и добавление его на сцену
var cube = new THREE.Mesh(new THREE.BoxGeometry(1, 1, 1), new THREE.MeshNormalMaterial());
scene.add(cube);

// Ограничение вращения по оси Y
var maxYRotation = Math.PI / 2; // Максимальный угол вращения по оси Y
var minYRotation = -Math.PI / 2; // Минимальный угол вращения по оси Y
var axisY = new THREE.Vector3(0, 1, 0); // Ось вращения по оси Y

// Обработчик событий вращения мыши
function onMouseMove(event) {
  // Получение изменения координат мыши
  var deltaX = event.movementX || event.mozMovementX || event.webkitMovementX || 0;
  var deltaY = event.movementY || event.mozMovementY || event.webkitMovementY || 0;
  
  // Вычисление углов вращения
  var angleY = deltaX * 0.01;
  var angleX = deltaY * 0.01;

  // Поворот объекта по осям Y и X
  cube.rotateOnAxis(axisY, angleY);
  cube.rotation.x += angleX;

  // Ограничение вращения по оси Y
  var currentRotationY = cube.rotation.y;
  if (currentRotationY > maxYRotation) {
    cube.rotation.set(cube.rotation.x, maxYRotation, cube.rotation.z);
  } else if (currentRotationY < minYRotation) {
    cube.rotation.set(cube.rotation.x, minYRotation, cube.rotation.z);
  }
}

// Добавление обработчика событий на элемент canvas
var canvas = document.getElementsByTagName('canvas')[0];
canvas.addEventListener('mousemove', onMouseMove, false);


В этом примере мы создаем куб и добавляем его на сцену. Затем мы создаем ось вращения по оси Y и устанавливаем максимальный и минимальный углы вращения. В обработчике событий мыши мы используем метод rotateOnAxis для вращения объекта по оси Y и свойство Object3D.rotation.x для вращения объекта по оси X. После вращения объекта мы проверяем его текущий угол вращения по оси Y и, если он превышает максимальный или минимальный угол, устанавливаем его на максимальный или минимальный угол, соответственно.