{{indexmenu_n>2}} =====Работа с координатами, поворотом, масштабом 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();