Образовательный виртуальный мир vAcademia

Инструменты пользователя

Инструменты сайта


Боковая панель

Работа с координатами, поворотом, масштабом 3D-объектов. Синхронизация

У 3D-объекта есть следующие три свойства, которые синхронизируются между всеми клиентами виртуального мира автоматически:

  • position – координаты объекта;
  • rotation – поворот объекта;
  • scale – масштаб объекта.

1. Свойство position

Задание позиции

  • Способ 1:
    • obj.position.x = 10;
    • obj.position.y = 12;
    • obj.position.z = 15;
  • Способ 2:
    • obj.position = new Position3D(10, 12, 15);

Чтение (копирование) позиции

  • Способ 1:
    • var x = obj.position.x;
    • var y = obj.position.y;
    • var z = obj.position.z;
  • Способ 2:
    • var pos = obj.position.clone();

Операции над позицией

  • Получить длину (модуль вектора)
    • pos.length()
  • Нормализовать вектор
    • pos.normalize()
  • Векторное произведение
    • pos.cross( new Position3D(0,0,1));
  • Умножить вектор на скаляр
    • pos.mult( scalar);
  • Поделить позицию на число
    • pos.div(10);
  • Интерполяция с другой позицией с коэффициентом koef
    • pos.blend(pos2, koef);
  • Узнать угол поворота между вектором и другим вектором
    • var ang = pos.angle(pos2);

2. Свойство rotation

Задание поворота

  • obj.rotation = new Rotation3D(x, y, z, angle), где
    • x, y, z – ось вращения
    • angle – угол в градусах

Внимание! Не следует пытаться задать отдельные компоненты поворота, это будет работать неправильно, т.к. фактически поворот является кватернионом, который для правильного использования должен быть постоянно в нормализованном состоянии. Нормализация производится после изменения каждого компонента.

Чтение (копирование) поворота

  • Способ 1:
    • var x = obj.rotation.x;
    • var y = obj.rotation.y;
    • var z = obj.rotation.z;
    • var angle = obj.rotation.w;
  • Способ 2:
    • var rtn = obj.rotation.clone();

Операции над поворотом

  • Прибавить один поворот к другому
    • rtn.mult(rotation2);
  • Повернуть позицию вокруг начала координат
    • pos.mult(rotation);
  • Обратный поворот
    • rotation. conjugate();
  • Интерполяция с коэффициентом koef
    • rotation.blend(secondRTN, koef);

3. Свойство scale

Задание масштаба

  • Способ 1:
    • obj.scale.x = 10;
    • obj.scale.y = 12;
    • obj.scale.z = 15;
  • Способ 2:
    • obj.scale = new Scale3D(10, 12, 15);

Чтение (копирование) масштаба

  • Способ 1:
    • var x = obj.scale.x;
    • var y = obj.scale.y;
    • var z = obj.scale.z;
  • Способ 2:
    • var scl = obj.scale.clone();
jazyk/objects.txt · Последние изменения: 2023/05/08 17:44 (внешнее изменение)