2013-11-18 2 views
1

Я работаю над своим низким уровнем понимания OpenGL, и я наконец пришел к тому, как оживить 3D-модели. Нигде я не смотрю, как мне нравится скелетная анимация. большинство вещей используют какой-то трехмерный движок и просто говорят «Загрузить скелет» или «Применить анимацию», но не как загрузить скелет или как фактически переместить вершины.Использование шейдера для анимации сетки

Я предполагаю, что каждая кость имеет матрицу 4x4 для перевода/вращения/шкалы для вершин, прикрепленных так же, когда кость перемещается, прикрепленные вершины также перемещаются на одну и ту же сумму.

для скелетной анимации Я предполагал, что вы передадите Кость (кости) в шейдер, таким образом, в вершинном шейдере я перемещаю текущую вершину, прежде чем она войдет в шейдер фрагмента. Если у меня есть ключевая анимация, я посылаю текущую кость и новую кость в шейдер вместе с текущим временем между кадрами и интерполирует точки между костями в зависимости от того, сколько времени между ключевыми кадрами.

Это правильный способ анимировать сетку? или есть лучший способ

+2

Почти правильно, но каждая вершина обычно зависит от нескольких костей на некоторую величину - как множитель для каждой кости, а сумма множителей равна 1. Это больше о том, как художники это делают. Кроме того, может быть хорошей идеей ограничить кости только вращением (без перевода/масштабирования) и использовать кватернионы для плавной интерполяции (но опять же, зависит от фактических данных). – keltar

+0

Делает смысл, вершины вокруг говорят, что локоть будет зависеть от костей верхней и нижней руки. Я понимаю, что это связано с «весом» или некоторым модификатором того, какая вершина выполняется конкретной костью. Очевидно, что перевод и масштабирование будут необходимы только в особых случаях, когда анимация требует, чтобы что-то вроде руки модели расти. Все еще нужно полностью изучать кватернионы, которые я изучаю их чуть меньше недели. – Snowdrama

ответ

3

Хорошо - способ анимации зависит от формата и данных, которые написаны на нем. Некоторые форматы предоставляют вам векторы, некоторые используют матрицы. Я должен признать, что я пришел на этот сайт, чтобы задать аналогичный вопрос, но я указал формат (использовал * .x файлы, вы можете проверить topic), и я получил ответ.

Вы идете по теме правильно. Если вы хотите создать образец, вы можете найти его на OpenGL wiki.

+0

Ok Это имеет смысл, точно так же, как текстуры, формат определяет сохраненные данные. У меня еще нет формата, потому что я не был уверен, что мне нужно было экспортировать из блендера. – Snowdrama

+1

Проверьте ссылки, которые я дал в своем посте, они могут вам помочь. И о формате: не так много открытых форматов, которые могут хранить скелетную анимацию. Вот почему я использовал формат * .x. Блендер может экспортировать его точно. –

Смежные вопросы