Russian Qt Forum
Ноябрь 22, 2024, 20:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Автоматическая анимация  (Прочитано 14396 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Ноябрь 11, 2015, 12:59 »

Добрый день

Дано:

- Есть базовый 3D объект, строго говоря, набор/иерархия объектов. Примеры: птица - имеет тело, крылья, лапы. Насекомое - тело, 6 ног и усики и.т.п. - все что угодно созданное юзером.  

- Создается серия таких объектов, юзер назначает число копий. С помощью движка физики и задаваемых юзером "сил" эти копии как-то анимируются. Пример: на полянке посадили напр 100 птичек. Далее юзер включил силу "вверх" - ну вот птички полетели, траектория каждой известна.

Требуется:

- синхронизировать поведение деталей (крылья, ноги и.т.п.) к имеющейся траектории объекта. Движок ни о каких деталях не знает, для него весь объект представляется упрощенным примитивом, напр box'ом. Продолжая пример с птичками выше: пока они сидят, крылья сложены, а на взлете расправляют крылья и машут - иначе как они взлетят? Разумеется все данные об анимации деталей у юзера имеются, напр записано 20 (или сколько надо) положений каждого крыла, это соответствует одному взмаху.

Соображения:

- Пример: бежит таракан. Больше скорость - быстрее подставлять ему положения ног (из имеющегося набора). и наоборот. То есть просто-напросто крутить анимацию ног с текущей скоростью. Однако этот случай не общий. У той же птички все куда сложнее. На взлете она машет активно (хотя скорость-то еще мала). В полете она может "планировать" (какое-то время взмахи отсутствуют). А если зависает в воздухе (как в фильме "Любовь и голуби") то машет изо всех сил, да и положение меняет. Др словами "простой зависимостью от текущей скорости" явно не отделаться. Повторюсь, все нужные "куски" (махание, планирование, зависание) у юзера должны быть. Нужно придумать систему которая бы позволяла юзеру их удачно и гибко "склеивать", возможно со случайными вариациями. Ну вот заготовил он какой-то "кусок", как (или куда) ему его воткнуть? Или уж совсем по-простому: что должно быть в UI?

Ну так что, будем "разрабатывать архитектуру" и все такое?  Улыбающийся

Спасибо

 

« Последнее редактирование: Ноябрь 11, 2015, 13:04 от Igors » Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #1 : Ноябрь 11, 2015, 17:08 »

Насчет UI - ну например что-то типа таймлайна - для каждого объекта указывать, какая анимация запускается с какого времени по какое и с каким фреймрейтом.

Что-то вроде флеша, например - http://inf.1september.ru/view_article.php?ID=200801704
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #2 : Ноябрь 12, 2015, 06:45 »

Насчет UI - ну например что-то типа таймлайна - для каждого объекта указывать, какая анимация запускается с какого времени по какое и с каким фреймрейтом.
Это все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Ноябрь 13, 2015, 09:33 »

Ну вот, как всегда Улыбающийся А совсем недавно как уверенно рассуждали: "Editor", "Toolbar", какой класс там чего должен знать о каком (впрочем я тоже участвовал). Ну да, то вещи знакомые, а здесь.... "откуда я могу это знать?". Ну так и я не знаю, надо придумать, списать-то негде (а хотелось бы)

Ну а что собственно здесь такого военного, непостижимого? Хорошо видна сущность "анимация" (записанные данные). Думается она должна знать как вписываться в текущую скорость. Или скалить ее саму или крутить loop - а возможно и то и другое. По аналогии с виджетом size: min, max, preferred, только здесь size - время.

Второй довольно приятный момент - композиция базовых анимаций. Опять аналогия с QHBoxLayout - создаем контейнер базовых анимаций (или др контейнеров) и проигрываем уже его, пусть разбирается с начинкой и сам организует взмахи, для юзера надо только включить анимацию "полет".

Да, но вот как дать ему возможность переключать анимации? Вообще-то первый ответ который я ожидал "скрипты". Мол, вот пусть скрипт пишет, и там что хочет переключает - это ведь "от задачи зависит", поэтому каких-то универсальных решений быть не может. Однако, хотя пытон у меня есть. меня смущает что если все выглядит "вот так уж гладко" - наверняка фуфло. Очевидно нужно иметь какие-то "события". Когда юзер подействовал силой "вверх", он может явно задать и смену анимации (вот оно событие). Дальше - пока полный туман.

В общем, хотелось бы пообсуждать с умными людьми, конечно "готовых решений" никто не требует (хотя и не отказывается). Разумная мысль - уже хорошо, пара-тройка - прекрасно  Улыбающийся 
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #4 : Ноябрь 13, 2015, 14:05 »

Скрипты не катят, ведь закон, по которому происходит переключение, заранее не известен, так?
А если известен, то каждая птичка должна сама знать, в каком состоянии она находится, и соответственно какую анимацию использовать. Т.е. сама птичка - это контроллер анимации.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #5 : Ноябрь 13, 2015, 14:06 »

Но чтобы отличить "планирование" от "полета", скорости и высоты не достаточно. Скажем, птичка летит вниз, но машет крыльями - это по какому закону должно быть тогда? Улыбающийся
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Bepec
Гость
« Ответ #6 : Ноябрь 13, 2015, 14:15 »

Как контролировать десятки объектов с разной анимацией и разным временем запуска?
Сделать контроллер.

 
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 13, 2015, 15:47 »

Скрипты не катят, ведь закон, по которому происходит переключение, заранее не известен, так?
А если известен, то каждая птичка должна сама знать, в каком состоянии она находится, и соответственно какую анимацию использовать. Т.е. сама птичка - это контроллер анимации.
По классике
Цитировать
Но одна малэнькая но гордая птычка сказала: "Я лично полэчу прямо на солнце". И она поднималась все више и више...
Так вот, таких гордых птичек мы не планируем. Многого от нее не требуется - просто пусть себе машет крылышками как-то интересно - чтобы не выглядело все однообразно/механистично. Никакой она сам себе не контроллер.

Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя. Пока неясно как. Но никакого real-time нету - сначала пусть движок обсчитает все траектории, а потом уж займемся анимацией деталей.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #8 : Ноябрь 13, 2015, 19:19 »

а как тогда совмещаются эти требования?

все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.

и

Цитировать
Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #9 : Ноябрь 15, 2015, 09:33 »

а как тогда совмещаются эти требования?

все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.
и
Цитировать
Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя.
Ручная/базовая анимация - это нулевой уровень, с которого все начинается. Для каждого объекта на линейке времени юзер создает ключ(и). Напр на кадре 50 лапка должна занять такое-то положение, а на кадре 100 - уже другое. Рез-том проигрывания кадров 50-100 будет какое-то движение объекта или его части.

Автоматическая анимация задумывается комбинация заготовленных ручных, обычно для многих объектов. Напр текущий (глобальный) кадр уже 200, но зная закон изменения (напр базовая анимация просто зациклена) мы вычисляем что текущее положение лапки как на кадре 50, оттуда его и берем. Для др объекта целевой кадр возможно будет другим в зависимости от параметров "кручения" базовой.

Речь о том что нужен некий "контроллер" переключения базовых анимаций. Напр на кадрах 0-50 птички сидят и/или чего-то клюют (для каждой крутится одна базовая анимация). Теперь они полетели, возможно все вместе или как-то по частям, как движок сделал. Траектория полета каждой известна. Вот надо обеспечить переход с одной заготовленной базовой анимации "сидим" на другую "летим".
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #10 : Ноябрь 16, 2015, 12:53 »

С точки зрения ООП переключением анимаций должен заниматься объект птички, поскольку только птичка знает о своем текущем состоянии. Каждая птичка должна являться контроллером. Если это не получается сделать сейчас - необходимо пересмотреть архитектуру проекта.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #11 : Ноябрь 16, 2015, 14:38 »

... переключением анимаций должен заниматься объект птички, поскольку только птичка знает о своем текущем состоянии.
Объект птички - это всего лишь записанная траектория движения, по сути сырые исходные данные, с какой стати он должен что-то решать?

Каждая птичка должна являться контроллером.
Если это не получается сделать сейчас - необходимо пересмотреть архитектуру проекта.
Так пересматривайте - все что есть сейчас изложено в стартовом посте  Улыбающийся

С точки зрения ООП..
Ой Улыбающийся А может не надо?
Записан
Bepec
Гость
« Ответ #12 : Ноябрь 16, 2015, 14:57 »

Контроллер нужен в том или ином виде. Или на каждую, или общий для птичек.
Но для начала нужно ответить на вопросы
1) так всё же автоматически, или же задаётся пользователем?
2) если задаётся, то в каком формате и что (трактория, анимация привязана к положению или же к направлению).

И лишь после ответа на эти вопросы, можно уже дальше рассматривать данный конкретный случай.
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #13 : Ноябрь 16, 2015, 15:25 »

Контроллер, прежде всего, должен следить за состоянием объектов и за его изменением. Т.е. должен определять момент, когда сидящая птичка вдруг начинает лететь, например. Т.е. на каждом шаге симуляции каждая птичка должна быть проверена на предмет изменения скорости-высоты-положения-ктознаетещечего. Состояние поменялось - запомнили его - воткнули новую анимацию. Только вот где тогда хранить все эти состояния прикажете? Логичнее все-же хранить их в "птичках", а не в "глобальном конроллере", иначе получится каша из структур и массивов.
Записан

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #14 : Ноябрь 16, 2015, 16:06 »

Контроллер нужен в том или ином виде. Или на каждую, или общий для птичек.
Но для начала нужно ответить на вопросы
1) так всё же автоматически, или же задаётся пользователем?
2) если задаётся, то в каком формате и что (трактория, анимация привязана к положению или же к направлению).

И лишь после ответа на эти вопросы, можно уже дальше рассматривать данный конкретный случай.
Что хочет юзер (пример).

- посадить на поляну N птичек (напр 100), пусть напр они спокойно едят 

- в заданный момент (напр юзер решил на кадре 50) птички полетели, здесь много вариантов в зависимости от параметров полета

- сделав кружок-другой они приземлились и опять едят

Вот все. Разумеется юзер понимает что все нужные данные он должен иметь - и параметры и траекторию полета стаи задать, и все едят/летят/приземляются должны быть заготовлены в виде набора всех нужных кадров - конечно для 1 птички, для 100 это сделать руками уже нереально.

Но вот "формат", "контроллер", то-се - совершенно не его дело, это все решает программист. Нужны от юзера какие-то еще данные - пожалуйста, задумывайте, предлагайте. А юзер будет вводить - ну конечно данные должны быть разумны.

Сейчас я аппроксимировал каждую птичку "ящиком" и организовал изначальную расстановку и полет. В рез-те для каждого ящика известна его матрица на каждом кадре, которая однозначно определяет положение и ориентацию (не тратим время на подробности формата). Все скорости/ускорения тоже на руках. Все, теперь мне из "ящиков" надо сделать милых птичек  Улыбающийся
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.129 секунд. Запросов: 23.