Войти
ПрограммированиеФорумГрафика

Скелетная анимация в directX

Страницы: 1 2 Следующая »
#0
22:10, 26 авг. 2014

Не могу понять что из себя представляет кость в directX. Что задает направление(не местоположение) кости? Ее размеры? При визуализации скелетного меша с frametransform по умолчанию все отображается нормально, но если повернуть одну из костей, она, во первых, поворачивается не вокруг оси, заданной d3dxrotation..(), а вокруг другой. А во вторых, вершины поворачиваются не вокруг начала кости, а где то по середине между данной костью и ее родителем


#1
22:34, 26 авг. 2014

Кость - это матрица.

#2
11:37, 27 авг. 2014

Wraith
а почему происходит такая путаница с осями поворота? и почему при повороте происходит смещение вершин перед поворотом? гружу меш из .x файла. могу кинуть проект. посмотришь?

#3
11:58, 27 авг. 2014

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

#4
12:50, 27 авг. 2014

Panya911
Во-первых надо посмотреть ориентацию осей при экспорте из блендера. Она может не совпадать с той, что в DX по умолчанию (матрица View).
Во-вторых нужно определиться, как кости будут представлены в твоём рендере: в локальном ли пространстве объекта, в пространстве ли родительской кости и т.д. Отсюда исходит способ экспорта вершин.

Совет: сделай простейшую иерархию, два бокса, один прицеплен к другому. И посмотри результат в рендере.
И я бы сразу распрощался .x файлами. Лучше сделать один раз (тяжело поначалу), но на всю остальную часть карьеры/хобби.

#5
13:00, 27 авг. 2014

Kroll
А можно, пожалуйста, поподробнее?
Где посмотреть ориентацию осей в блендере? Про пространства представления костей в книге вообще ничего не было( занимаюсь по "Джим Адамс - DirectX продвинутая анимация - 2004"), поэтому даже не знаю с какой стороны за это взяться

#6
13:06, 27 авг. 2014

Kroll
при создании двух боксов стоящих друг на друге, и при повороте верхней кости, поворот происходит вокруг правильных осей, но все равно происходит смещение вершин в сторону нижней кости

#7
13:17, 27 авг. 2014

Kroll
11 | Скелетная анимация в directX
Чтобы было понятно о чем я. Слева blender, справа мое приложение

#8
13:26, 27 авг. 2014

А где поворот?

Не помню, как там в .x файле. Но, например, на каждую вершину один вес кости (жесткая сцепка).
Тогда тебе надо вершины меша этой кости экспортнуть в локальной системе кости. Вершина меша содержит и индекс кости, назовём его bi.
Экспортнуть трансформацию кости в локальной системе всей модели, назовём её Tm[bi].

В движке нужная нам трансформация кости Tr[bi] (то, что ты хочешь с ней сделать, поворот, например).
Далее в рендере, проходим по всем костям:
Tb[bi] = Tr[bi] * Tm[bi]. Tb и есть конечная трансформация кости, на эту матрицу мы умножаем вершины перед умножением на World.

#9
13:32, 27 авг. 2014

Kroll
В данном примере я указал:
D3DXFRAME_DERIVED *r = FindDXFrame("Armature_Bone_001", SkinFrame);
  D3DXMatrixRotationX(&r->TransformationMatrix, 0);
Твой вышеописанный алгоритм я и использую. видимо проблема в экспорте. Как экспортировать трансформацию в локальной системе координат?

#10
13:37, 27 авг. 2014

У экспортера есть какие-нибудь галочки?

#11
13:38, 27 авг. 2014

Kroll
нашел у себя первый косяк. У меня перемножались матрицы tm*tr, а не tr*tm, но теперь плющатся вершины верхнего бокса:D

#12
13:40, 27 авг. 2014

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

#13
13:40, 27 авг. 2014

Kroll
экспортер | Скелетная анимация в directX

#14
13:42, 27 авг. 2014

Плющится, это чаще всего, когда на родительскую кость умножаем более одного раза.

Страницы: 1 2 Следующая »
ПрограммированиеФорумГрафика

Тема в архиве.