Поиск    Список пользователей    Группы пользователей    Регистрация (Registration)    Профиль (Profile)     Личные сообщения    Вход  

   Форум у C!NEMAXiMUS-a >> Cinema 4D >> Чем отследить НАПРАВЛЕНИЕ движения объекта в анимации?
     
Открыть новую тему   Ответить на тему
<< Предыдущая тема :: Следующая тема >>  
Автор Сообщение
Vn145
Други




Зарегистрирован: 09.10.2015
Сообщений: 13
Страна (Country): 3D World

Чем отследить НАПРАВЛЕНИЕ движения объекта в анимации? Ответить на тему Ответить с цитатой

Подскажите нубу, можно ли отследить НАПРАВЛЕНИЕ движения объекта в анимации в текущем кадре (например "вверх" или "вниз") с помощью XPRESSO или ещё чего-нибудь.
То есть на условие (если, If)="вверх" требуется назначить одно действие (любое по желанию), на "вниз" - другое.
09.10.2015 12:19
View user's profile Отправить личное сообщение
magvai
Завсегдатай




Зарегистрирован: 10.01.2005
Сообщений: 285
Страна (Country): Россия
Екатеринбург
Версия Cinema4D (Version):13
Ответить на тему Ответить с цитатой

с помощью x-presso делается просто: вычисляется разность векторов Global Position между двумя кадрами.
Пример в файле (r13).
Пояснение:
У объекта control есть userdata векторного типа - туда выводится вектор смещения между двумя соседними кадрами. Отслеживайте вектор (или его компоненту) и от его направления стройте условие. Например: if (Anima directionY) > 0 then "вверх"
_____
второй вариант: можно выражение AlignPath назначить и сразу отслеживать вектор Z. Выражения имеют более низкий приоритет, чем анимация.
13.10.2015 07:30
View user's profile Отправить личное сообщение
Vn145
Други




Зарегистрирован: 09.10.2015
Сообщений: 13
Страна (Country): 3D World

Ответить на тему Ответить с цитатой

Скачал.
При открытии файла выдаёт окно: "ошибочная структура файла" (у меня установлена синема R14.042 Rus). Нужно 13-ю ставить?
Попробую по словам понять-сделать.
13.10.2015 15:39
View user's profile Отправить личное сообщение
Vn145
Други




Зарегистрирован: 09.10.2015
Сообщений: 13
Страна (Country): 3D World

Ответить на тему Ответить с цитатой

Всё что на сегодня получилось, это определить текущий кадр и прибавить к нему вручную константу (+1 на скрине-примере).


Как дальше определить координату Y объекта в этом полученном времени-кадре?.. Или значение "процента выравнивания по сплайну" которое будет в этом (следующем-прибавленном) кадре?.. не догоняю.

Дайте скрин Xpresso приложенного примера "anima_dir.c4d", если не сложно.
14.10.2015 10:50
View user's profile Отправить личное сообщение
magvai
Завсегдатай




Зарегистрирован: 10.01.2005
Сообщений: 285
Страна (Country): Россия
Екатеринбург
Версия Cinema4D (Version):13
Ответить на тему Ответить с цитатой

Странно. У Синьки никогда не наблюдалось проблем с совместимостью. Даже обратная была, вроде, лучше, чем в офисе том же самом.
Ну что ж. Так объясню:
Чем проще, тем эффективнее. Берём объект и отправляем с его узла Global Position в узлы Memory и на первый вход Math:subtract (настроенный на вектор). Выход memory на второй вход Math:subtract. На выходе получаем вектор, направленный туда же, куда между двумя кадрами смещается Ваш объект.
Настройки на скрине, но поясню словами тоже:
1) Memory работает следующим образом: он хранит массив значений, длина массива задаётся параметром HistoryDepth, тип хранимых значений - DataType. Индекс значения (начиная с 0), которое будет на выходе, задаётся параметром HistoryLevel.
Каждый раз, когда на вход подаётся значение, оно запоминается с индексом 0, а все хранимые значения смещаются в следующий индекс, последнее выбрасывается (FIFO)
Нам надо настроить так, чтобы хранились 2 вектора: индекс 0 - координаты объекта с текущего кадра, индекс 1 - координаты объекта с предыдущего кадра. На выход должен подаваться последний. Следовательно настройки такие:
DataType = vector
HistoryDepth = 2
HistoryLevel = 1

NewNode->XPresso->General->memory

2) Math - универсальный узел для вычислений. Выполняет одну из простейших операций - сложение, вычитание, умножение и деление, кроме того может вычислить модуль. Работает со всеми синьковскими типами данных (по ряду причин не все действия возможны с некоторыми данными, например, не определено деление векторов). Может выполнять действия только с одинаковыми типами. Тип данных определяется параметром DataType, вид операции - Function.
Нам надо вычесть вектор из вектора, потому:
DataType = vector
Function = subtract

NewNode->XPresso->Calculate->math

Итог: на выходе math будет вектор, сонаправленный с вектором перемещения объекта за время между двумя последними кадрами. При перемотке назад, вектор, разумеется, развернётся. Далее можно этот вектор разложить на компоненты с помощью Vector2Reals (NewNode->XPresso->Adapter->Vector2Reals). Если Вы хотите различать только направления вверх или вниз, то Вам надо Y-компоненту этого вектора сравнивать с 0. Отрицательные значения соответствуют движению вниз, положительные - вверх, нулевые говорят об отсутствии движения вверх-вниз (движение в плоскости может иметь место)[/code]
14.10.2015 17:49
View user's profile Отправить личное сообщение
Vn145
Други




Зарегистрирован: 09.10.2015
Сообщений: 13
Страна (Country): 3D World

Ответить на тему Ответить с цитатой

Пробовал я эту "Память" уже, с тем же результатом и сейчас получилось.
Смотрите, чего получается:
Объект заанимирован ключами. Жму на "воспроизведение анимации". Xpresso молчит, анимация идёт - кубик движется. Жму на стоп. Xpresso выдаёт ТЕКУЩИЕ значения. Итог: на короткое мгновение мигает значение (если вычитаем "вещественное", а не "вектор"... причём значение это всегда положительное, никаких отрицательных) и выходит в ноль, разность нулевая (значения одинаковы, память выдаёт значение для текущего кадра).
"Выражения имеют более низкий приоритет, чем анимация." Может из-за этого? Как тогда мониторить-сохранить (для визуального контроля) состояние значений Xpresso (при включенной анимации)?

Читаем Хелп:
"Глубина памяти
Если это значение = 1, при этом будет учитываться только актуальное состояние, которое и будет передано на порт выхода. Если значение = 2, при этом будет учитываться актуальное состояние (уровень №1) и предшествующее состояние (уровень №2).
При определении трёх уровней памяти (Глубина памяти =3), вы можете использовать значения 0 (актуальное состояние), 1 (предшествующее состояние) и 2 (состояние до предшествующего), для произведения опроса значений."

Так, стоп... ставим повыше значения: глубина = 3 , уровень = 2. Результаты появились, отличные от нуля. Но отрицательные значения только в "векторной" схеме (если сразу преобразовать в Y-"вещественное", все значения положительны - просто значение уменьшается (кубик вниз) или увеличивается (кубик движется вверх)).
Это всё надо обмозговать и попробовать на нескольких конкретных задачах-примерах... Вроде получилось, но возможно непонятки с "уровнями" "памяти" остались. Если получится решить мою конкретную задачу (не с этим "кубиком"), наверное выложу результат (покрасоваться).

Спасибо! Благодарю за ответ.
15.10.2015 14:18
View user's profile Отправить личное сообщение
Vn145
Други




Зарегистрирован: 09.10.2015
Сообщений: 13
Страна (Country): 3D World

Ответить на тему Ответить с цитатой

Razz Выкладываю свой первый внятный результат с Xpresso по этой теме. (файлы приложены ниже. Чтобы увидеть нужна авторизация на форуме).
(только верхний объект в верхней точке у меня почему-то подвисает во вьюпорте - приходится сразу рендерить кадр чтобы результат видеть)

и ещё масенькая проблемка (хотя и с ней всё работает): здесь в примере продублированы два абсолютно одинаковых клонера (для "поднимающей полоски", и для "падающего кольца"). Может можно легко одним обойтись?
16.10.2015 12:29
View user's profile Отправить личное сообщение
Показать сообщения за последний(-ие):   
Открыть новую тему   Ответить на тему    Форум у C!NEMAXiMUS-a >> Cinema 4D Все даты указаны в GMT + 2 ч.
Страница 1 из 1

 
Перейти к:  
Вы не можете открывать новые темы в этом форуме
Вы не можете отвечать на темы в этом форуме
Вы не можете редактировать Ваши сообщения в этом форуме
Вы не можете удалять Ваши сообщения в этом форуме
Вы не можете учавствовать в опросах на этом форуме




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

Copyright © 2003-2010 C!NEMAXiMUS