В контексте разработки 3D-графики в PlayCanvas важную роль играют понятия локальной и мировой системы координат. Эти пространства служат для определения позиции объектов, их ориентации и масштаба в виртуальном мире. Понимание различий между локальными и мировыми координатами критически важно для работы с движением, анимацией и взаимодействием объектов в 3D-сцене.
Локальное пространство (или локальные координаты) объекта в PlayCanvas — это система координат, которая определяется относительно родительского объекта. Каждое положение, ориентация и масштаб объекта в локальной системе координат являются относительными к его родителю.
Пример: Если у вас есть объект A, который является родительским для объекта B, то координаты объекта B в локальной системе будут измеряться относительно объекта A. Если объект A перемещается, поворачивается или масштабируется, то все дочерние объекты также будут изменять свои локальные координаты, сохраняя относительное положение.
В PlayCanvas локальные координаты можно задать через свойства объекта
localPosition, localRotation и
localScale. Эти свойства предоставляют информацию о
положении, ориентации и масштабе объекта относительно его родительского
объекта.
Пример кода:
var entity = new pc.Entity();
entity.setLocalPosition(10, 5, 0);
entity.setLocalRotation(0, 45, 0);
entity.setLocalScale(2, 2, 2);
Здесь setLocalPosition устанавливает локальное положение
объекта, setLocalRotation — локальный угол поворота, а
setLocalScale — локальный масштаб относительно
родителя.
Мировое пространство (или мировые координаты) — это система координат, которая фиксирована относительно всей сцены. В отличие от локальных координат, мировые координаты всегда учитывают все трансформации (перемещения, повороты, масштабирование) всех родительских объектов.
Мировые координаты позволяют определить точное положение объекта в
глобальной системе координат сцены, независимо от его родительской
иерархии. В PlayCanvas мировые координаты объекта можно получить через
свойства getPosition, getRotation и
getScale. Эти методы возвращают данные о положении,
ориентации и масштабе объекта относительно мировой системы
координат.
Пример кода:
var worldPosition = entity.getPosition(); // Мировое положение
var worldRotation = entity.getRotation(); // Мировой поворот
var worldScale = entity.getScale(); // Мировой масштаб
Иногда возникает необходимость перевести координаты из одного пространства в другое. Для этого PlayCanvas предоставляет удобные методы для преобразования между локальными и мировыми координатами.
Для перевода локальных координат в мировые можно использовать метод
localToWorld. Этот метод принимает локальные координаты
точки и возвращает её мировые координаты.
Пример:
var localPoint = new pc.Vec3(1, 1, 0);
var worldPoint = entity.localToWorld(localPoint);
В этом примере точка с координатами (1, 1, 0) в
локальной системе объекта entity преобразуется в мировые
координаты.
Если нужно преобразовать мировые координаты в локальные, используется
метод worldToLocal. Этот метод принимает мировые координаты
и возвращает локальные координаты относительно объекта.
Пример:
var worldPoint = new pc.Vec3(10, 5, 0);
var localPoint = entity.worldToLocal(worldPoint);
В этом примере точка с мировыми координатами (10, 5, 0)
преобразуется в локальные координаты относительно объекта
entity.
Понимание локального и мирового пространства имеет множество практических применений в разработке 3D-приложений. Наиболее распространённые случаи включают:
Движение объектов в сцене: Когда объект перемещается в сцене, важно учитывать его положение относительно других объектов, особенно если они находятся в иерархической структуре (родитель/дочь). Локальные координаты позволяют отслеживать, как объект двигается относительно своей иерархии, а мировые — в контексте всей сцены.
Интерактивность: При взаимодействии с объектами, например, при клике или касании, необходимо учитывать их мировые координаты, чтобы точно определить, какой объект был выбран. В PlayCanvas для этого часто используются методы преобразования мировых координат в локальные координаты экрана.
Кинематические трансформации: В анимации или при движении персонажа важно управлять движением объектов в мировых координатах, но при этом учитывать их локальные координаты для правильного синхронизированного движения в иерархии сцены.
Допустим, нужно переместить объект в мировых координатах. Для этого
можно использовать setPosition с мировыми координатами:
entity.setPosition(10, 5, 0); // Перемещает объект в мировые координаты (10, 5, 0)
Однако если нужно переместить объект в локальные координаты его родителя, следует использовать:
entity.setLocalPosition(2, 3, 0); // Перемещает объект относительно родителя
Для поворота объекта относительно мировой системы координат можно
использовать метод setRotation:
entity.setRotation(45, 0, 0); // Поворот объекта на 45 градусов вокруг оси X
Если же нужно изменить поворот относительно родительской системы
координат, используется setLocalRotation:
entity.setLocalRotation(30, 0, 0); // Поворот объекта относительно родителя на 30 градусов
В PlayCanvas работа с локальным и мировым пространствами позволяет разработчику эффективно управлять позициями, ориентациями и масштабами объектов в 3D-сценах. Понимание принципов перевода между локальными и мировыми координатами помогает решать сложные задачи, такие как анимации, взаимодействия с объектами и динамическое управление сценой. Эти знания лежат в основе построения гибких и интерактивных приложений на базе PlayCanvas.