Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Алгоритмы > Создать анимацию крыльев птицы


Автор: Mr_Nuke 31.8.2012, 11:08
Всем привет. Столкнулся с задачей, необходимо создать анимацию на дельфи, анимировать необходимо птицу, что б она махала крыльями.  
Первый курс, нужно использовать простейшие методы рисования на канвасе. 
user posted image

Попытался нарисовать дугу,  через arc, и вращать ее. Не получилось... квадрат, в который она вписывается, не вращается, а просто уменьшается. 

Тогда была другая идея, изменять размеры квадрата, и начальные/конечные точки рисования дуги. 
Рассчитал конечное положение "крыла", нарисовал дугу. Потом от конечных координат отнял начальные, и вычислил шаг.  
user posted image

Но уже на втором шаге все расплывается. Не могу найти алгоритм изменения координат. Или может есть более легкий способ?
user posted image


Автор: ksnk 31.8.2012, 11:27
Mr_Nuke, Нарисуй несколько картинок, отсканируй и меняй по кругу. Получится чиста артхус  smile 


Автор: DarkProg 31.8.2012, 11:51
Цитата(ksnk @  31.8.2012,  12:27 Найти цитируемый пост)
 отсканируй и меняй по кругу

Ну зачем же так, можно использовать любые средства рисования.

А так, мой совет таков, попробуйте вычислить две функции для x и для y одного крыла и другого, я понял смысл, того что вы хотите но там кажется двумя дугами не обойтись.

Рисовать крылья надо от центра птички(т.е. взять за начало координат). Так с ходу накидать не смогу формулу, надо подумать...

Автор: Pavia 31.8.2012, 11:53
Самая простое это спрайтовая анимация. Заготовил несколько изобажений и выводишь по круг.
И это будет выглядить лучше, чем то что вы нарисуете линиями и окружностями.

Автор: DarkProg 31.8.2012, 11:54
Взмах крыльев, это по идее: уменьшение округлости крыла, т.е. надо взять увеличить радиус, но уменьшать длинну дуги.

Автор: Pavia 31.8.2012, 12:03
Цитата(DarkProg @  31.8.2012,  11:51 Найти цитируемый пост)
Рисовать крылья надо от центра птички(т.е. взять за начало координат). Так с ходу накидать не смогу формулу, надо подумать...

Чего там думат? Поврот и перенос.

Взяли точку, от неё отложили вектор повернули. Перенесли начало координат в получившуюся точку нарисовали другую кость.


Автор: Mr_Nuke 31.8.2012, 12:08
Пока отредактировал первый пост, добавил картинки. Сейчас почитаю комментарии, отпишусь smile


Цитата(DarkProg @ 31.8.2012,  11:51)
попробуйте вычислить две функции для x и для y одного крыла и другого

Две функции?? Получается, меняться должны сами функции. 
Мне кажется, это еще тяжелее, чем арки высчитывать. 

Появилась адовая идея, просчитать массив точек для крыла, и уже эти точки поворачивать по формуле


картинку не хочу, лаба заключается не в этом, пошлют с картинкой


Цитата(DarkProg @ 31.8.2012,  11:54)
Взмах крыльев, это по идее: уменьшение округлости крыла, т.е. надо взять увеличить радиус, но уменьшать длинну дуги.

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


Цитата(Pavia @ 31.8.2012,  12:03)
Взяли точку, от неё отложили вектор повернули. Перенесли начало координат в получившуюся точку нарисовали другую кость.

А вот я не понял... Мы говорим про дуги, не про линии? Которые еще должны и вращаться... Или ты имеешь введу типа массива точек?

Автор: Pavia 31.8.2012, 12:21
Цитата

А вот я не понял... Мы говорим про дуги, не про линии? Которые еще должны и вращаться... Или ты имеешь введу типа массива точек?

Я имею в виду обычную скелетную анимацию.
http://www.youtube.com/watch?feature=fvwp&NR=1&v=Fmp7f7BKE74

Автор: Mr_Nuke 31.8.2012, 12:24
Цитата(Pavia @ 31.8.2012,  12:21)
Я имею в виду обычную скелетную анимацию.

А если чуть-чуть по подробней?

Автор: ksnk 31.8.2012, 13:08
Mr_Nuke, Анимация - это набор картинок. Для фигуры из палочек - не нужно заморачиваться функциями трансформации одной картинки в другую - нужно их рисовать каждый раз заново.

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

Автор: Mr_Nuke 31.8.2012, 13:43
Цитата(ksnk @ 31.8.2012,  13:08)
В качестве примера, все-таки, посоветую нарисовать последовательность "маха" крыльями на бумаге.  В крайних положениях и в паре положений в середине. Померить картинки линейкой...
Получится что-то вроде массива реперных точек для каждого кадра (край крыла, центр крыла,   тело птицы) через которые можно прорисовать крыло, к примеру, в помощью кривых Безье.

Ну как бы может это и логично, но идея лабы - найти алгоритм изменения

Автор: Pavia 31.8.2012, 23:31
Цитата

Ну как бы может это и логично, но идея лабы - найти алгоритм изменения

Идея лабы это проверка знаний которые вы должны были получить, а не в выдумывании чего либо.

По поводу линейки. 
Художников учат делать эскиз по линейке. 
При создании анимации персонажа используют костюм, который определяет положение человека. Т.е тоже своеобразная линейка.

Либо в редакторе создается модель. Хотя типично модель, в редакторе рисуется, обводится по фотографии.

После уже делается анимация. Это либо ключевая анимация, либо спрайтовая анимация, либо скелетная анимация. 

Автор: _Y_ 1.9.2012, 09:54
Может такая идея подойдет.
Находим на крыле суставы. 
Кости относительно точек крепления движутся по окружностям - описываем положение суставов.
Крыло углов не имеет - аппроксимируем суставы, например полиномомом или сплайном

Автор: Mr_Nuke 2.9.2012, 10:32
_Y_, Да, вот у меня была как раз это было последней идеей, но в процессе реализации выяснилось, что можно заменить кривые на прямые линии. Так что живем  smile 


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)