|   Регистрация (Registration)   Вход  



1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9

Глобальные и локальные координаты

Глобальные координаты - это координаты объекта во внешней(мировой) системе координат по отношению к внешнему(мировому) началу координат (нулю), тогда как локальные координаты - это координаты по отношению к родительскому объекту. Если у объекта нет родительского - глобальные и локальные координаты совпадают. Это положение верно для расположения (Position), масшабирования (Scale) и вращения (Rotation). Каждое из этих действий также может быть как глобальным так и локальным. Значения, которые вы видите в координатной секции Attribute Manager-а, всегда локальные. Только Coordinates Manager можно настроить так, чтобы он показывал глобальные координаты. Когда Вы используете ноды объекта оба набора действий доступны (и локальный, и глобальный). Не доступно только Global Scale, поскольку оно практически не используется.
Основа для всех этих координат - это матрица. Матрица 4x4 для простоты использования сокращена до 3x4.
Матрица описывает 4 вектора, по 3 значения на каждый.
V0 - хранит позицию(смещение), в то время как V1-V3 используются при вращении и масштабировании.
V1-V3 нельзя использовать непосредственно (напрямую). Все кого интересуют подробности работы матрицы могут обратиться к главе Mikael Sternes в C.O.F.F.E.E. SDK Documentation по ссылке plugincafe
Если к этим векторам требуется доступ нужно использовать специальные ноды-адаптеры для них.
К чему эти трудности, зачем использовать такую сложную вещь, как матрица? Возможно это сложно, но это делает остальные вещи проще. Матрицы хранят всю информацию, нужную нам, в одном компактном пакете и делают возможными некоторые хитрости, что действительно облегчает жизнь.
Примером этого может послужить известный Вам Target Expression. Как бы Вы начали реализовывать этот Expression? Кто-либо из Вас, знающий тригонометрию, обратился бы к синусам и косинусам, но гораздо более простой путь - использовать вектора и матрицы.
Главное понятие, нужное нам, - это разностный вектор между объектом, который должен быть нацелен, и его целью. Использовать надо глобальные координаты, поскольку Expression нацелен на работу, независимо от иерархии объектов.
Отнимая один вектор от другого мы получим разностный вектор, который мы могли бы представить, как стрелку, направленную от одного объекта к другому.
Этот разностный вектор - все, что нам нужно, кроме того что нельзя использовать его для соответсвенного вращения нашего объекта. Нам требуется новая матрица на основе этого вектора. Для этой операции используем готовый нод в Xpresso называемый "Vector 2 Matrix". Он создает матрицу, которая когда подается информация во вход input Глобальной матрицы (Global Matrix) соединит ее с соответсвующим разностным вектором, но главное пока отсутсвует. Разностный вектор не содержит информации о стартовой позиции (помните вектор V0 в матрице). Мы можем исправить это расщеплением матрицы на составляющие и заполнением информацией о реальном положении объекта.
Завершенная конструкция похожа на следующую сцену.

Для того чтобы сделать решение чуточку интереснее надо рассмотреть немного другое решение. Основа (разностный вектор) та же, но вместо полного соединения матрицы мы хотим использовать только вращение. Для этого мы будем использовать нод "Matrix 2 HPB". Для доступа к совместному вектору вращения нужно кликнуть на красном квадратике в правом верхнем углу нода и выбрать его. Теперь подадим на вход это вращение глобальному вращению объекта. Нужную сцену вы можете скачать здесь.
Обе конструкции дадут одинаковый результат.

Подсказки

Автоприведение типов: Xpresso старается приводить один тип к другому самостоятельно, когда это возможно. Один из наиболее часто используемых типов приведения - преобразование из вектора в действительное число. Результатом является длина вектора. Обратное преобразование из действительного числа в вектор, дает вектор каждая компонента которого равна исходному дейсвительному числу.

Имена портов: Показать имена портов(вход/выход) XGroup можно выбрав Ports->Show Names в контекстном меню редактора Xpresso.

Векторное умножение: Используя нод Math установленный в Vector и Multiplication дает перемножение компонент: (a/b/c)*(1/2/3)=(a*1/b*2/c*3). Если вы используете как множитель действитеьлное число, то результат будет таким: 5 * (a/b/c) = (a*5/b*5/c*5).

1 ! 2 ! 3 ! 4 ! 5 ! 6 ! 7 ! 8 ! 9


  К списку уроков

 новости   plugin db   а-чем-а-как   форум   ссылки   о проекте  
Вся ответственность за содержание материалов, опубликованных на сайте, лежит на их авторах.
Использование материалов, опубликованных на сайте, разрешено только со ссылкой на источник.

Copyright © 2003-2011 C!NEMAXiMUS