Образовательный виртуальный мир 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);

3.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.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.1400223085.txt.gz · Последние изменения: 2023/05/08 17:36 (внешнее изменение)