1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

Анимация велосипедной цепи

Тема в разделе "Анимация", создана пользователем Tweak239, 8 июн 2011.

Модераторы: Артер
  1. Tweak239

    Tweak239 Активный участник

    С нами с:
    22.03.2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    17
    Не хотелось создавать новую тему, но темы "мелкие вопросы", или что-то в этом роде, я не обнарудил.

    Имеется велосипедная цепь и две звезды, а так же ось большой звезды.
    Цепь анимируется при помощи Dummy, запущенного по пути, на контроле процента прохождения пути стоит float_script следующего содержания:

    dependsOn $Sprocket.rotation.controller
    sp_rot=$Sprocket.rotation.controller.X_Rotation
    28.0/73.0*sp_rot/360

    28 - количество зубцов, 73 - количество звеньев цепи.
    Вращаем звезду - всё прекрасно работает

    Сама звезда прилинкована к оси.
    Вращаем ось - звезда вертится, а цепь стоит на месте...
    Вопрос - почему?
    Я предполагаю, что неправильно задал переменную sp_rot.

    Буду несказанно рад вашей поддержке.
    Прикреплённая к ветке тема "Мелкие вопросы" значительно снизит количество подобных тем.
     

    Вложения:

    • 2333467.jpg
      2333467.jpg
      Размер файла:
      21,5 КБ
      Просмотров:
      259
  2. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Если объект $Sprocket это объект "звезда", тогда в скрипте используй объект "ось" вместо объекта $Sprocket ("звезда").
     
  3. iVAt

    iVAt Знаток

    С нами с:
    03.08.2006
    Сообщения:
    1.138
    Симпатии:
    1
    Баллы:
    46
  4. Tweak239

    Tweak239 Активный участник

    С нами с:
    22.03.2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    17
    igorznag
    Да, Sprocket - это звезда, но проблема не в том, какой объект использовать, понятно, что можно просто ось взять а как сделать именно такую цепь событий, как у велосипеда - педали - ось - звезда - цепь - звезда - колесо. Не поверю, что так нельзя.

    iVAt
    В этом уроке вообще задаётся изначально анимация гусеницам танка, от которой уже зависит вращение колёс.

    На мой взгляд, суть в том, что выражение $Sprocket.rotation.controller.X_Rotation обращается непосредственно к вращению звезды при помощи гизмо, то есть к контроллеру Euler_XYZ, который не учитывает поворот от связи (link) с осью.

    Хотя нет, если на контроллер вращения звезды (Sprocket) поставить float script:

    dependsOn $Cranks_Axis.rotation.controller
    ca_rot=$Cranks_Axis.rotation.controller.X_Rotation
    ca_rot

    то есть прямая зависимость от вращения оси (Cranks_Axis), и крутить ось - цепь всё равно стоит неподвижно. Как так?
     
  5. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Простой пример. В сцене есть 5 объектов: объект "велосипед" (родитель=SceneRoot), объект "ось" (родитель=объект "велосипед"), объект "звезда" (родитель=объект "велосипед"), объект "Dummy-цепь" (родитель=SceneRoot), объект "сплайн-путь" (родитель=объект "велосипед").
    1. Выдели объект "звезда", примени к нему Position Constraint и в качестве Target выбери объект "ось".
    2. На контроллер вращения объекта "звезда" поставь float script:
    Код:
    dependsOn $Cranks_Axis.rotation.controller 
    ca_rot=$Cranks_Axis.rotation.controller.X_Rotation 
    DegToRad(ca_rot)
    3. Выдели объект "Dummy-цепь", примени к нему Path Constraint и в качестве Target выбери объект "сплайн-путь".
    4. На контроллер процента прохождения пути объектом "Dummy-цепь" поставь float_script:
    Код:
    dependsOn $Sprocket.rotation.controller 
    sp_rot=$Sprocket.rotation.controller.X_Rotation 
    28.0/73.0*sp_rot/360 
    5. Вращай объект "ось".
     
  6. Tweak239

    Tweak239 Активный участник

    С нами с:
    22.03.2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    17
    igorznag
    Спасибо большое, теперь всё работает.
    Получается проблема была в том, что не было Position Constraint? Странно.
     
  7. igorznag

    igorznag Знаток

    С нами с:
    23.04.2010
    Сообщения:
    1.254
    Симпатии:
    172
    Баллы:
    65
    Проблема была в том, что нужно объект "звезда" прилинковать не к объекту "ось", а к объекту "велосипед". Объект "ось" и объект "звезда" должны иметь общий родитель (объект "велосипед"). Position Constraint нужно было применить к объекту "звезда" (Target = объект "ось"), чтобы объект "звезда" перемещался во время перемещения объекта "ось".
     
  8. Tweak239

    Tweak239 Активный участник

    С нами с:
    22.03.2007
    Сообщения:
    110
    Симпатии:
    0
    Баллы:
    17
    есть книга, в которой можно прочитать про это подробнее?
    что бы понимать как оно работает более детально?
     
Модераторы: Артер

Поделиться этой страницей