Russian Qt Forum
Ноябрь 25, 2024, 22:04
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Программирование
>
Общий
>
Автоматическая анимация
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Автоматическая анимация (Прочитано 14422 раз)
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Автоматическая анимация
«
:
Ноябрь 11, 2015, 12:59 »
Добрый день
Дано:
- Есть базовый 3D объект, строго говоря, набор/иерархия объектов. Примеры: птица - имеет тело, крылья, лапы. Насекомое - тело, 6 ног и усики и.т.п. - все что угодно созданное юзером.
- Создается серия таких объектов, юзер назначает число копий. С помощью движка физики и задаваемых юзером "сил" эти копии как-то анимируются. Пример: на полянке посадили напр 100 птичек. Далее юзер включил силу "вверх" - ну вот птички полетели, траектория каждой известна.
Требуется:
- синхронизировать поведение деталей (крылья, ноги и.т.п.) к имеющейся траектории объекта. Движок ни о каких деталях не знает, для него весь объект представляется упрощенным примитивом, напр box'ом. Продолжая пример с птичками выше: пока они сидят, крылья сложены, а на взлете расправляют крылья и машут - иначе как они взлетят? Разумеется все данные об анимации деталей у юзера имеются, напр записано 20 (или сколько надо) положений каждого крыла, это соответствует одному взмаху.
Соображения:
- Пример: бежит таракан. Больше скорость - быстрее подставлять ему положения ног (из имеющегося набора). и наоборот. То есть просто-напросто крутить анимацию ног с текущей скоростью. Однако этот случай не общий. У той же птички все куда сложнее. На взлете она машет активно (хотя скорость-то еще мала). В полете она может "планировать" (какое-то время взмахи отсутствуют). А если зависает в воздухе (как в фильме "Любовь и голуби") то машет изо всех сил, да и положение меняет. Др словами "простой зависимостью от текущей скорости" явно не отделаться. Повторюсь, все нужные "куски" (махание, планирование, зависание) у юзера должны быть. Нужно придумать систему которая бы позволяла юзеру их удачно и гибко "склеивать", возможно со случайными вариациями. Ну вот заготовил он какой-то "кусок", как (или куда) ему его воткнуть? Или уж совсем по-простому: что должно быть в UI?
Ну так что, будем "разрабатывать архитектуру" и все такое?
Спасибо
«
Последнее редактирование: Ноябрь 11, 2015, 13:04 от Igors
»
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #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
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #2 :
Ноябрь 12, 2015, 06:45 »
Цитата: Racheengel от Ноябрь 11, 2015, 17:08
Насчет UI - ну например что-то типа таймлайна - для каждого объекта указывать, какая анимация запускается с какого времени по какое и с каким фреймрейтом.
Это все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #3 :
Ноябрь 13, 2015, 09:33 »
Ну вот, как всегда
А совсем недавно как уверенно рассуждали: "Editor", "Toolbar", какой класс там чего должен знать о каком (впрочем я тоже участвовал). Ну да, то вещи знакомые, а здесь.... "откуда я могу это знать?". Ну так и я не знаю, надо придумать, списать-то негде (а хотелось бы)
Ну а что собственно здесь такого военного, непостижимого? Хорошо видна сущность "анимация" (записанные данные). Думается она должна знать как вписываться в текущую скорость. Или скалить ее саму или крутить loop - а возможно и то и другое. По аналогии с виджетом size: min, max, preferred, только здесь size - время.
Второй довольно приятный момент - композиция базовых анимаций. Опять аналогия с QHBoxLayout - создаем контейнер базовых анимаций (или др контейнеров) и проигрываем уже его, пусть разбирается с начинкой и сам организует взмахи, для юзера надо только включить анимацию "полет".
Да, но вот как дать ему возможность переключать анимации? Вообще-то первый ответ который я ожидал "скрипты". Мол, вот пусть скрипт пишет, и там что хочет переключает - это ведь "от задачи зависит", поэтому каких-то универсальных решений быть не может. Однако, хотя пытон у меня есть. меня смущает что если все выглядит "вот так уж гладко" - наверняка фуфло. Очевидно нужно иметь какие-то "события". Когда юзер подействовал силой "вверх", он может явно задать и смену анимации (вот оно событие). Дальше - пока полный туман.
В общем, хотелось бы пообсуждать с умными людьми, конечно "готовых решений" никто не требует (хотя и не отказывается). Разумная мысль - уже хорошо, пара-тройка - прекрасно
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #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
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #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
Гость
Re: Автоматическая анимация
«
Ответ #6 :
Ноябрь 13, 2015, 14:15 »
Как контролировать десятки объектов с разной анимацией и разным временем запуска?
Сделать контроллер.
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #7 :
Ноябрь 13, 2015, 15:47 »
Цитата: Racheengel от Ноябрь 13, 2015, 14:05
Скрипты не катят, ведь закон, по которому происходит переключение, заранее не известен, так?
А если известен, то каждая птичка должна сама знать, в каком состоянии она находится, и соответственно какую анимацию использовать. Т.е. сама птичка - это контроллер анимации.
По классике
Цитировать
Но одна малэнькая но гордая птычка сказала: "Я лично полэчу прямо на солнце". И она поднималась все више и више...
Так вот, таких гордых птичек мы не планируем. Многого от нее не требуется - просто пусть себе машет крылышками как-то интересно - чтобы не выглядело все однообразно/механистично. Никакой она сам себе не контроллер.
Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя. Пока неясно как. Но никакого real-time нету - сначала пусть движок обсчитает все траектории, а потом уж займемся анимацией деталей.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #8 :
Ноябрь 13, 2015, 19:19 »
а как тогда совмещаются эти требования?
Цитата: Igors от Ноябрь 12, 2015, 06:45
все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.
и
Цитировать
Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя.
Записан
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
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #9 :
Ноябрь 15, 2015, 09:33 »
Цитата: Racheengel от Ноябрь 13, 2015, 19:19
а как тогда совмещаются эти требования?
Цитата: Igors от Ноябрь 12, 2015, 06:45
все давно есть, но это "ручная" анимация - а разговор об автоматической. Птичек (или чего еще) слишком много, париться с каждой нереально.
и
Цитировать
Момент переключения - да, тут сложности. Как-то его надо задавать "извне", причем действиями пользователя.
Ручная/базовая анимация - это нулевой уровень, с которого все начинается. Для каждого объекта на линейке времени юзер создает ключ(и). Напр на кадре 50 лапка должна занять такое-то положение, а на кадре 100 - уже другое. Рез-том проигрывания кадров 50-100 будет какое-то движение объекта или его части.
Автоматическая анимация задумывается комбинация заготовленных ручных, обычно для многих объектов. Напр текущий (глобальный) кадр уже 200, но зная закон изменения (напр базовая анимация просто зациклена) мы вычисляем что текущее положение лапки как на кадре 50, оттуда его и берем. Для др объекта целевой кадр возможно будет другим в зависимости от параметров "кручения" базовой.
Речь о том что нужен некий "контроллер" переключения базовых анимаций. Напр на кадрах 0-50 птички сидят и/или чего-то клюют (для каждой крутится одна базовая анимация). Теперь они полетели, возможно все вместе или как-то по частям, как движок сделал. Траектория полета каждой известна. Вот надо обеспечить переход с одной заготовленной базовой анимации "сидим" на другую "летим".
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #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
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #11 :
Ноябрь 16, 2015, 14:38 »
Цитата: Racheengel от Ноябрь 16, 2015, 12:53
... переключением анимаций должен заниматься объект птички, поскольку только птичка знает о своем текущем состоянии.
Объект птички - это всего лишь записанная траектория движения, по сути сырые исходные данные, с какой стати он должен что-то решать?
Цитата: Racheengel от Ноябрь 16, 2015, 12:53
Каждая птичка должна являться контроллером.
Если это не получается сделать сейчас - необходимо пересмотреть архитектуру проекта.
Так пересматривайте - все что есть сейчас изложено в стартовом посте
Цитата: Racheengel от Ноябрь 16, 2015, 12:53
С точки зрения ООП..
Ой
А может не надо?
Записан
Bepec
Гость
Re: Автоматическая анимация
«
Ответ #12 :
Ноябрь 16, 2015, 14:57 »
Контроллер нужен в том или ином виде. Или на каждую, или общий для птичек.
Но для начала нужно ответить на вопросы
1) так всё же автоматически, или же задаётся пользователем?
2) если задаётся, то в каком формате и что (трактория, анимация привязана к положению или же к направлению).
И лишь после ответа на эти вопросы, можно уже дальше рассматривать данный конкретный случай.
Записан
Racheengel
Джедай : наставник для всех
Offline
Сообщений: 2679
Я работал с дискетам 5.25 :(
Re: Автоматическая анимация
«
Ответ #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
Сообщений: 11445
Re: Автоматическая анимация
«
Ответ #14 :
Ноябрь 16, 2015, 16:06 »
Цитата: Bepec от Ноябрь 16, 2015, 14:57
Контроллер нужен в том или ином виде. Или на каждую, или общий для птичек.
Но для начала нужно ответить на вопросы
1) так всё же автоматически, или же задаётся пользователем?
2) если задаётся, то в каком формате и что (трактория, анимация привязана к положению или же к направлению).
И лишь после ответа на эти вопросы, можно уже дальше рассматривать данный конкретный случай.
Что хочет юзер (пример).
- посадить на поляну N птичек (напр 100), пусть напр они спокойно едят
- в заданный момент (напр юзер решил на кадре 50) птички полетели, здесь много вариантов в зависимости от параметров полета
- сделав кружок-другой они приземлились и опять едят
Вот все. Разумеется юзер понимает что все нужные данные он должен иметь - и параметры и траекторию полета стаи задать, и все едят/летят/приземляются должны быть заготовлены в виде набора всех нужных кадров - конечно для 1 птички, для 100 это сделать руками уже нереально.
Но вот "формат", "контроллер", то-се - совершенно не его дело, это все решает программист. Нужны от юзера какие-то еще данные - пожалуйста, задумывайте, предлагайте. А юзер будет вводить - ну конечно данные должны быть разумны.
Сейчас я аппроксимировал каждую птичку "ящиком" и организовал изначальную расстановку и полет. В рез-те для каждого ящика известна его матрица на каждом кадре, которая однозначно определяет положение и ориентацию (не тратим время на подробности формата). Все скорости/ускорения тоже на руках. Все, теперь мне из "ящиков" надо сделать милых птичек
Записан
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...