Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 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
1-1161332146
zorik
2006-10-20 12:15
2006.12.03
Что за файл GqeDelph?


2-1163756193
Дмитрий Белькевич
2006-11-17 12:36
2006.12.03
io error 32


15-1163175707
Ketmar
2006-11-10 19:21
2006.12.03
я знаю, что все читают. я знаю, что баян. но...


2-1163401115
funky
2006-11-13 09:58
2006.12.03
Считывание строк


15-1163324692
Kerk
2006-11-12 12:44
2006.12.03
Фонарь





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский