С помощью констрейна Orient Constraint сориентируем третью кость по вращениям локатора IWingAdd.
Убедившись, что крыло правильно реагирует не только на перемещение, но и на повороты контрольного локатора IWingControl, можем спрятать наш вспомогательный локатор IWingAdd. Итак, цель достигнута - мы получили управление передней кромкой крыла. Полученный результат нельзя назвать удовлетворительным - перья жестко прикреплены к костям передней кромки крыла, и при перемещении контрольного локатора наша конструкция скорее становится похоже на ежика, а не на крыло птицы.
Поэтому нам придется продолжить наши изыскания для получения согласованного управления задней кромкой крыла.
Управление задней кромкой Для этого построим цепочку костей вдоль задней кромки крыла, сориентируем «перьевые» кости скелета на кости этой цепочки, а функциональность этой «заднекромочной» цепочке костей придадим с помощью ИК-сплайна.
Итак, используя функцию привязки к точке (snap to point), выстроим цепочку костей вдоль задней кромки крыла, переименовав сочленения соответственно в backJ, backJ_1, backJ_9 (файл wing13.ma).
С помощью Aim Constraint нацелим перьевые кости a1,…,a9 на кости построенной дополнительной цепочки backJ_1.....backJ_9, используя в качестве Aim Vector направление вдоль перьевой кости (локальную ось X), то есть вектор «1,0,0>>.
Однако при «нацеливании» нужно позаботиться о том, чтобы плоскость пера была сориентирована вдоль костей передней кромки.
Поэтому в качестве Up Vector выберем направление локальной оси Z, то есть <<0,0,1», и направим этот самый Up Vector на объект - соседнюю кость передней кромки крыла.
Для а1, а2, аЗ целевым объектом для Up Vector будет frontLeft2, для а4,а5, аб - frontLeft3, а для а7,а8 и а9 - frontLeft4, соответственно.
После того, как все девять «перьевых» костей а1, …, а9 будут сориентированы указанным образом, можно подвигать управляющий локатор крыла IWingControl, чтобы убедиться, что теперь перья работают «почти правильно»: они ориентируются на звенья «заднекромочной» цепочки костей, при этом плоскости перьев ориентируются вдоль костей передней кромки крыла (файл wing14.ma).
Однако было бы естественно, чтобы перья перекручивались относительно своей продольной оси так, чтобы передняя кромка пера ориентировалась вдоль передней кромки крыла, а задняя кромка пера - вдоль построенной нами дополнительной «заднекромочной» цепочки. Для этого нам нужно повернуть вторые половины перьевых скелетных цепочек Ы, …, Ь9 на подходящие углы.
Сделать это просто - нужно воспользоваться Aim Constraint, а в качестве целевых объектов выбрать те же кости дополнительной, «заднекромочной» скелетной цепочки, что и для соответствующих костей а1, …, а9.
В качестве Up Vector надо выбрать те же направления локальных осей Z «0,0,1», а вот с выбором направления самого Up Vector придется повозиться. Этим Up Vector естественно выбрать вектор, направление которого определяется соответствующим звеном «заднекромочной» цепочки (разность координат конца и начала соответствующей кости) - но только как перевести «кость в вектор», то есть как определить вектор направления каждой кости в мировой системе координат?