Форум: "Игры";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
ВнизСкелетная анимация :( Найти похожие ветки
← →
Зм1й © (2006-01-27 15:25) [0]Вопрос наверно не совсем для форума, но я уже 2 месяца бьюсь, и на форум у меня последняя надежда. Я хочу сделать скелетную анимацию. Средствами maxscript экспортирую из max"а вершины объектов, кости, у каждой вершины ссылка на кость. И для обычных объектов, и для костей экспортирую кадры анимации - перенос, поворот в углах эйлера и масштаб. Пока будем считать, что для одной вершины одна кость.
Так вот, в кадре для каждого объекта пересчитываю результирующую матрицу трансформацию. Если есть родитель, то учитываю его трансформацию. Потом каждую вершину каждого объекта умножаю на полученную матрицу соответствующего объекта. Естественно перед каждым кадром объекты "обнуляю". Кости, и другие "не-skin-овые" объекты выводятся вроде корректно. А вот что делать со скинами? Как корректировать их вершины, чтобы при движении костей двигались и вершины?
← →
TrahTibiDoh (2006-01-27 15:39) [1]Хде-та я видал что есть прымер со костяной мультииплыкацыей, хде не помню
← →
TrahTibiDoh (2006-01-27 15:41) [2]Вспомныл, видел в белом охошке в белой коробке, на столе хоторая лежит, может спросить у нее? У
← →
Зм1й © (2006-01-27 15:54) [3]
> TrahTibiDoh (27.01.06 15:41) [2]
спроси, только я не совсем понял, о чём ты говоришь
← →
XProger © (2006-01-27 17:25) [4]Зм1й,
http://dtf.ru/articles/read.php?id=29
http://www.gamedev.ru/articles/?id=40112
http://www.gamedev.ru/coding/10917.shtml
← →
Sapersky (2006-01-27 17:25) [5]Белое окошко :)
http://www.tmtlib.narod.ru/files.htm
← →
Зм1й © (2006-01-27 19:26) [6]Я это читал, я теорию-то понимаю. Мне кажется, что проблема конкретно в моей задаче... Я ведь модели экспортирую из макса, в нём я применяю модификатор Skin. Так вот я пробовал просто умножать каждую вершину на матрицу соответствующей кости, но получался бред. В статье, которую дал Sapersky, модель предварительно "сворачивается", то есть умножается на матрицу обратную матрице нулевого кадра. Но там md2, а у меня MAX. Пробовал умножать на матрицу, противоположную матрице нулевого кадра(то есть полученную из отрицательного переноса и отрицательного поворота), но тоже не катит. Пробовал ещё умножать на матрицу переноса, полученную из вектора - центра кости, не катит. В общем хочется услышить от тех, кто имел дело со скелетной анимацией из макса(модификатор Skin)- какие операции нужно применять к вершинам, если известны матрицы костей?
← →
TrahTibiDoh (2006-01-28 14:21) [7]А монЫтор пробовал тряпочкой бумажной протереть?
← →
Зм1й © (2006-01-28 17:36) [8]
> TrahTibiDoh (28.01.06 14:21) [7]
> А монЫтор пробовал тряпочкой бумажной протереть?
Слыш, "брЫтан", ты вот это щас к чему? :E
← →
Зм1й © (2006-01-28 19:48) [9]Я вот думаю, может я неправильно обратную матрицу нахожу... Подскажите пожалуйста, как правильно её находить?
← →
Зм1й © (2006-01-28 20:35) [10]Я решил находить вот так
TMatrix= Array[0..3, 0..3] of Single;
function Det_Mat(M: TMatrix): Single;
begin
Result:=M[0, 0]*M[1, 1]*M[2, 2]*M[3, 3]+M[0, 1]*M[1, 2]*M[2, 3]*M[1, 0]+
M[0, 2]*M[1, 3]*M[2, 1]*M[3, 2]+M[0, 3]*M[2, 0]*M[3, 1]*M[3, 0]-
M[0, 3]*M[1, 2]*M[2, 1]*M[3, 0]-M[0, 2]*M[1, 1]*M[2, 0]*M[1, 3]-
M[0, 1]*M[1, 0]*M[2, 2]*M[3, 1]-M[0, 0]*M[2, 3]*M[3, 2]*M[3, 3];
end;
function Inv_Mat(M: TMatrix): TMatrix;
var
d: Single;
begin
d:=Det_Mat(M);
if d<>0 then Result:=New_Mat(M[0, 0]/d, M[1, 0]/d, M[2, 0]/d, M[3, 0]/d,
M[0, 1]/d, M[1, 1]/d, M[2, 1]/d, M[3, 1]/d,
M[0, 2]/d, M[1, 2]/d, M[2, 2]/d, M[3, 2]/d,
M[0, 3]/d, M[1, 3]/d, M[2, 3]/d, M[3, 3]/d)
else Result:=M;
end;
но всё ещё хуже стало
Проверьте пожалуста на ошибки
P. S. Вы конечно извините, что я вас так достаю, но мне просто крайне важен этот вопрос :)
← →
Ricks © (2006-01-28 23:27) [11]Если ты хочешь найти обратную матрицу то тебе надо... (это я пытаюсь вспомнить линейную алгебру)...
обратная матрица находится как транспонированная матрица, составленная из алгебраических дополнений (по-моему так это называется) и умноженная на 1 / модуль нормальной матрицы
например:
a = ( a b )
( c d )
|a| = a*d - b*c
a^(-1) =
1/|a| * ( d -c )
(-b a )
а вообще лучше найди что-нибудь по аналитике!
← →
Зм1й © (2006-01-29 17:21) [12]Не мог бы ты написать тоже самое для 4*4, а то у меня нет учебника по линейной алгебре, есть только по обычной за 11 класс, но там этого нет...
← →
Ricks © (2006-01-30 10:58) [13]Почитай здесь:
http://www.mathem.h1.ru/matr.html
или покопайся в ссылках этого сайта, хотя и там все написано, я проверил :)
← →
Зм1й © (2006-02-05 15:34) [14]Никто не знает точную формулу, по которой рассчитывается скелетная анимация в Максе? Может у кого исходник есть? Или может кто-нибудь может подсказать форум, где могут ответить на мой вопрос? Ниужели так трудно поделиться опытом?
:(
P. S. Поиск я юзал, не нашёл
← →
TWINc © (2006-02-05 16:34) [15]инвертирование матрицы есть в VectorMath GLScene"ы
← →
Зм1й © (2006-02-09 19:10) [16]Вопрос всё ещё в силе...
> TWINc © (05.02.06 16:34) [15]
glscene я не использую, и к тому же думаю, что дело всё-таки не в матрицах. Просто я изначально всё не так делаю, я же не знаю формулы :(
← →
XProger © (2006-02-09 19:27) [17]Зм1й, где найти формулу тебе уже в [15] посте подсказали
Страницы: 1 вся ветка
Форум: "Игры";
Текущий архив: 2006.12.03;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.041 c