Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Игры";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Вниз

РЕАЛИСТИЧНАЯ Физика в игре.   Найти похожие ветки 

 
Stalker_23b   (2004-01-09 23:13) [0]

Я хочу использовать в игре физическую библиотеку ODE, встроенную в GLScene. Но при ее использовании, я ставлю игровой процесс в рамки физичности. То есть я не могу просто взять и нарисовать скелетную анимацию персонажа, ибо теперь все его руки и ноги имеют массу и инерцию, и подчиняются физическим законам.
  Вообще я хочу написать файтинг роботов, который выглядел бы полностью физично. То есть при ударе, робот по всем законам физики вмазывается в стену и сползает по ней, при попадании в определенную часть тела толчок происходит именно туда, и т.д. И проблема моя в том, что, если я хочу анимировать двуногих роботов, до мне нужно написать алгоритм полностью физической ходьбы, ударов и т.д. - так как это делает человек. Но это очень сложно. Фактически, чтобы робот хотя бы умел стоять, ему постоянно нужно совершать кучу телодвижений, чтобы самобалансироваться. И как это реализовать - непонятно.
  Но я могу воздействовать на физическую систему, прилагая какие угодно силы и ограничения к частям тела робота. Как, с помощью этих ухищрений, добиться того, чтобы двуногий робот мог стоять, ходить, прыгать и драться?
  Мда...сложноватый вопрос получился...короче, как сделать физичную, но подконтрольную систему???


 
MrAngel   (2004-01-10 18:09) [1]

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

Иначе использовать только мышечную анимацию. Про мышечную я ещё ни где не читал, это как бы собственная задумка.

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


 
Кен ©   (2004-01-11 03:01) [2]


> Stalker_23b   (09.01.04 23:13)  

Там пример есть на GLScene и ODE со змейкой. Замейка сама учится ползать совершая случайные действия. За ночь работы может научиться более менее хорошо это делать.
Проблемы только с плоскостями. Стоит изменить её угол наклона, и все рассчёты надо начинать заново.

А с четвероногими, а тем более с двуногими ничего подобного и близко не видел, потому как просто нехватить можности обычного PC. Тут нужен специальный физический процессор, по аналогии с графическими процессорами на видеокартах. Если когда нибудь какая нибудь фирма удосужится его сделать, то будет матрица-революция.


 
Кен ©   (2004-01-11 03:06) [3]

Вообще для ODE надо начинать с форматов. Физических форматов. И редакторов для этих форматов. Чтобы можно было загружать физические модели как графические md2, md3, smd и прочие.


 
Stalker_23b   (2004-01-11 15:19) [4]

2 Кен: Ты не прав, ибо я видел совершенно аналогичный змейке пример для двуногого робота. Это сделал автор библиотеки ODE. Он, спомощью нейронных сетей (как и в змейке), обучал двуногого полностью физичного робота ходьбе. И обучил таки...(я скачивал ролик об этом). Но это все слишком сложно для игры. Однако в ней мы можем использовать "читерские" методы коррекции ходьбы, типа невидимых подставок и т.д. Сам автор ODE по поводу этого ответил мне - "никто не заметит, что кукла - марионетка, если он не видит веревок" :)
НО КАК ЭТО СДЕЛАТЬ?


 
Кен ©   (2004-01-12 01:50) [5]


> Stalker_23b   (11.01.04 15:19) [4]
> 2 Кен: Ты не прав, ибо я видел совершенно аналогичный змейке
> пример для двуногого робота. Это сделал автор библиотеки
> ODE. Он, спомощью нейронных сетей (как и в змейке), обучал
> двуногого полностью физичного робота ходьбе. И обучил таки...(

Хотьба была по горинознатльной плоскости или по плоскости произвольной кривизны ?

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

В общем дай сслыку посмотреть этого робота.


 
Asteroid ©   (2004-01-13 22:13) [6]

> MrAngel   (10.01.04 18:09) [1]
Насчет змейки. Может это что-то другое, но читал новость, чот сделали змею на генетических алгоритмах (змея состояла из некоторого числа кусков), причем в случае повреждения каких-либо фрагментов тела она перенастраивалась на оптимальное передвижение.

По теме - идеи такие:
1) задать напряжения в суставах и заставить робота стремиться к минимизации напряжений ("стойка по умолчанию").
2) высчитывать центр тяжести робота и если он выходит за рамки круга, переставить ногу с наименьшей нагрузкой.
Можно также ввести элементы случайности: чтобы робот в спокойном состоянии не стоял как мумия, слегка изменять угол минимальных напряжений.


 
MrAngel   (2004-01-14 18:03) [7]

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


 
Asteroid ©   (2004-01-14 18:38) [8]

> MrAngel   (14.01.04 18:03) [7]
Встать на ноги - это уже совершенно другая статья. Это уже переход из одного "нормального" положения в другое. Если человек лежит на полу, ему придется выполнить определенную последовательность, чтобы встать на ноги. Может просто сделать отдельную анимацию для поднятия себя - без физики или отключив напряжения.


 
Stalker_23b   (2004-01-15 01:26) [9]

2Ken : Здесь ты прав, нихрена там в реал-тайме не обсчитывается, идет обучение нейронной сети ходьбе на мноооогих поколениях. И действительно оно ТОЛЬКО для тех условий, где обучалось (наклон плоскости, отсутствие препятствий). Ссылка -...эээ..гдето на ODEшном сайте (не помню адрес).

2Asteroid : Хы, просто тебе говорить - задать напряжение в суставах. Ну, допустим, при долгом геморое мы его зададим, чтобы он стоял...но малейший толчок - и тело летит на пол. А вот чтобы в реалтайме само обсчитывалось, какое и где нужно напряжение - это есть задача не из легких.

Короче, посмотрел я на это дело, и плюнул - пусть будут хоть четырехногие роботы в игре, ибо чтоб не совсем уж колесные :) А то, действительно, без отключения физики НЕ РЕАЛЬНО сделать нормальный двуногий алгоритм. Н Е  РЕАЛЬНО. Вот.


 
Кен ©   (2004-01-15 01:42) [10]


> Stalker_23b   (15.01.04 01:26) [9]
> 2Ken : Здесь ты прав, нихрена там в реал-тайме не обсчитывается,
> идет обучение нейронной сети ходьбе на мноооогих поколениях.
> И действительно оно ТОЛЬКО для тех условий, где обучалось
> (наклон плоскости, отсутствие препятствий).


Вот. Это и называется МААААААААТРИЦА !!!

Берём робота, типа собачка Aibo.
Ставим на неё камеру и анализируем поверхность на которой Аибо стоит. Загоняем её(поверхность) в ODE, и тренируемся в нём ходить по этой поверхности. Лучший вариант из найденных передаём Аибо и она идёт по поврехности.

Вот так Агент Смит из Матрицы и работал.


> Ссылка -...эээ..гдето на ODEшном сайте (не помню адрес).

Очень бы хотелось увидеть.


 
Asteroid ©   (2004-01-15 01:47) [11]

> Stalker_23b   (15.01.04 01:26) [9]
И почему же он полетит на пол?
P.S. Поищи wireframe.swf и ты поймешь, о чем я говорю :)
P.P.S. Товарищи, просьба, не путайте нейронную сеть с генетическими алгоритмами. Нейронная сеть - распознавание и классификация информации, ГА - метод нахождения минимума функции. ГА сами по себе обучения не требуют, они дадут минимум ф-ции в любых условиях - и всегда относительно быстро.


 
Кен ©   (2004-01-15 01:47) [12]

Кстати в демках GLScene появился плащ Тринити. С физикой ODE. Типа шевелится по физическим законам. И давольно шустро.


 
Кен ©   (2004-01-15 01:54) [13]


> Asteroid ©   (15.01.04 01:47) [11]
> ГА сами по себе обучения не требуют, они дадут минимум ф-ции
> в любых условиях - и всегда относительно быстро.

Помоему их негде применять, эти генетические алгоритмы. Единственный пример который удалось найти - это поиск целых a,b,c в формуле a+const*b+const*c=const
Других примеров не нашёл. Хотя хотелось бы.


 
Asteroid ©   (2004-01-15 01:57) [14]

> Кен ©   (15.01.04 01:54) [13]
А как бы ты искал их стандартными методами? Насколько быстрее у тебя бы это получилось, если бы переменных было штук 10-15?


 
Asteroid ©   (2004-01-15 02:00) [15]

Насчет применения - везде, где нужно найти минимум функции :) Что это будет - в общем-то, все равно. Тут вот висит в трее прога, находит состяния молекул с минимальной энергией, работает на ГА. Та же несчастная змея [8] - приспоабливается к новым условиям.


 
Stalker_23b   (2004-01-15 03:55) [16]

2 KEN : http://q12.org/phd-movies.html тут ролики из дипломной работы автора библиотеки ODE (Russel Smith) о...как раз об обучении ходьбе физичных двуногих роботов и прыгающего робота. Но учти - ролик о полном обучении весит 14 мб.

2 Астероид : Не понял, что значит нейронные сети = распознование и классификация информации? Не только! Нейронная сеть - это есть обработка некого входного сигнала и генерация выходного, с возможностью обучения и оптимизации для наилучшего результата. И, с помощью такой сетки, можно решать мнооогие задачи, от игры в шахматы до распознавания изображений. И вот как раз, в этих роликах мы видим, как сеть учится ходить роботом.


 
Кен ©   (2004-01-15 04:05) [17]


> Asteroid ©   (15.01.04 01:57) [14]
> > Кен ©   (15.01.04 01:54) [13]
> А как бы ты искал их стандартными методами?

А мне и не надо. Задача уж больно вычурная. Функция и целые числа. Как будто специально её придумывали чтобы хоть где-то можно было ГА использовать.


 
Кен ©   (2004-01-15 04:37) [18]


> Stalker_23b   (15.01.04 03:55) [16]
> 2 KEN : http://q12.org/phd-movies.html тут ролики

Зачем мне ролики ? Я хотел "аналогичный змейке пример для двуногого робота".


 
Asteroid ©   (2004-01-15 06:08) [19]

> Stalker_23b   (15.01.04 03:55) [16]
Я имел в виду, что НС могут объединять схожие ситуации и давать один вывод. Она объединяет ситуации, в которых ее обучили и дает соотв. результат. Если ей дать новую и попросить сделать вывод, в лучшем случае будет несколько ситуаций, схожих (по мнению сети) с уже бывшими.
У ГА нет памяти, они не могут анализировать. Зато быстро вычисляют оптимальные параметры для любой функции. В т.ч. могут подстроить ту же НС при обучении (когда известен вход, известен выход, но нужно найти коэффициенты).
Наверное, я просто придираюсь к словам,. Сорри за оффтоп :)

Насчет робота - я просто слабо представляю весь ход обучения (от того момента, когда ему сказали "пройти 50м" до того, когда он выработал последовательность действий). Надо почитать литературку.
P.S. Человек ведь не знает реакцию на все случаи жизни. Так что нужен механизм принятия решений.


 
MrAngel   (2004-01-15 09:47) [20]

Если брать обучение хождению, то немного страшноватенько становится - человек очень долго обучался такому.


 
Asteroid ©   (2004-01-16 02:26) [21]

> MrAngel   (15.01.04 09:47) [20]
У человека сколько мышц, причем неразвитых? А у робота? :)


 
Alek Aaz ©   (2004-01-16 08:18) [22]

Этот человечек?
http://www.vrac.iastate.edu/~streeter/avh.html
Тут еще есть
http://www.natew.com/juice/


 
Alek Aaz ©   (2004-01-16 09:11) [23]

ИМХО. В начале нужно перевести и почитать статью по ODE http://opende.sourceforge.net/ode-latest-userguide.html
А там посмотрим...


 
Кен ©   (2004-01-17 02:55) [24]


> Alek Aaz ©   (16.01.04 09:11) [23]
> ИМХО. В начале нужно перевести и почитать статью по ODE
> http://opende.sourceforge.net/ode-latest-userguide.html
> А там посмотрим...

Читали только более старую версию. Насколько позволяет знание языка.
Вопрос в редакторе для создания динамических моделей и в формате для их храненния. Наподобии MilkShape для графических моделей.

Потому, что каждый раз писать код, чтобы создать сферу, потом куб, потом что-то ещё - гиморой. Представь, что захочешь создать автомобиль, сколько кода надо будет написать ? А если потом захочешь что-либо изменить ?

Нужен формат для дин. моделей и редактор.


 
Кен ©   (2004-01-21 07:24) [25]


> Alek Aaz ©   (16.01.04 09:11) [23]

Не знаю почему, но когда пытаюсь подводить момент к объетам ODE,
AddTorque(AffineVectorMake(0,0,10));
у меня вылетает сообщение об ошибке. В чём она может заключаться ?


 
Alek Aaz ©   (2004-01-22 06:55) [26]

Черт его знает, я с ODE не разбирался, но скоро начну.


 
Alex Storm   (2004-01-22 21:44) [27]

Простите за глупый вопрос, но хотелось бы знать, как использовать физическую библиотеку ODE ?


 
Кен ©   (2004-01-24 02:42) [28]


> Alek Aaz ©   (22.01.04 06:55) [26]
> Черт его знает, я с ODE не разбирался, но скоро начну.

Помоему где то годик назад ты нечто подобное уже писал. :)

Я хочу сделать управление передним колесом мотоцикла на ODE, чтобы его можно было поворачивать и разгонять, но немогу понять к каким координатам привязать приложение моментов. Координаты колеса вращаются вместе с ним. Координаты мира тоже не то, потому, что колесо может поворачиваться в разные стороны. Короче, в результате колесо не поворачивается, а заваливается бесконца на бок и раскручивается не по оси, а чёрти как.

Если будешь разбираться, то подскажи как его ( колесо мотоцикла ) правильно сделать. В смысле как правильно прилагать к нему моменты.


> Alex Storm   (22.01.04 21:44) [27]
> Простите за глупый вопрос, но хотелось бы знать, как использовать
> физическую библиотеку ODE ?

GLScene скачай. Там демки есть с ODE. Сделай поиск в файлах демок по "ODE" и найдёшь.


 
Alex Storm   (2004-01-24 18:13) [29]

>GLScene скачай. Там демки есть с ODE. Сделай поиск в файлах >демок по "ODE" и найдёшь.

Недавно закачал GLScene_v09b_Full с сайта www.GLScene.org
Поискал в демках стандартным виндовым поисковиком, но ничего не нашел. Чего делать? :)

Н-да, и еще - советовали скачать последние версии файлов GLS с помощью CVS-клиента... Скажите, где его найти?


 
Stalker_23b   (2004-01-24 23:02) [30]

2 KEN :
  Управление колесом нужно делать не через приложение сил к колесу, а через АнгулярМоторы или приложение сил напрямую к джоинту. Поясню: у тебя есть корпус и колесо, связанное с ним. например, через TODEJointHinge. Чтобы крутить колесо, есть 3 пути:
 1. dJointSetHingeParam(TODejointHinge.jointID,dParamVel,10) - примерно так, через экспортную функцию ОДЕ, ты можешь влиять на СКОРОСТЬ вращения джоинта.
 2. dJointAddHingeTorque(...) - примерно так ты можешь напрямую добавлять силы к телам, связанным джоинтом, координаты посчитаются сами.
 3. Создать АнгулярМотор и работать с ним. Это гиморный метод, так что RTFM.
  Не забудь указать максимальную силу воздействия для джоинта :
dJointSetHingeParam(TODejointHinge.jointID,dParamFMax,10000)- примерно так...
  А вообще - читайте хэлп по ОДЕ (для си) - там ВСЕ написано. Многие полезные функции не реализованы в методах GLScene ODE, приходится юзать напрямую.
  Будут вопросы по ОДЕ - задавайте.
 
  з.Ы. Ихвините за кривость наприсания - я пьяяяяян.............


 
Кен ©   (2004-01-25 04:23) [31]


> Alex Storm   (24.01.04 18:13) [29]
> >GLScene скачай. Там демки есть с ODE. Сделай поиск в файлах
> >демок по "ODE" и найдёшь.
>
> Недавно закачал GLScene_v09b_Full с сайта www.GLScene.org
> Поискал в демках стандартным виндовым поисковиком, но ничего
> не нашел. Чего делать? :)
>
> Н-да, и еще - советовали скачать последние версии файлов
> GLS с помощью CVS-клиента... Скажите, где его найти?

О Боже, это спрашивают чуть ли не в каждой ветке о GLScene.

Для скачки программ с сорсфоржа используется программа специальная. http://www.tortoisecvs.org/ Читай фак на http://glscene.sourceforge.net/faq.htm

Когда программулина заинсталилась, перегрузилась - создаешь папку скажем GLScene_CVS. Открываешь ее "проводником". На пустом месте жмешь правую кнопку мыша и выбираешь пункт CVS > Make New Module
Появилось окошко. В нем:
Protocol - без изменений (pserver)
Server - рисуешь там cvs.sourceforge.net
Port - лучше оставить пустым
Repository directory - пишешь /cvsroot/glscene  
User name - пишешь anonymous
Module - какую директорию хочешь закачать Delphi7, Demos или Source. Чувствителен к регистру букв.
Жмешь Ok. Иногда ругается на пароль. Не помню, что ему указал, кажется жал просто Ок. Начинает качать директории. В последствии в своей папке переодически жмешь CVS Checkout выбираешь папку которую хочешь посмотреть обновления


 
Кен ©   (2004-01-25 04:45) [32]


> Stalker_23b   (24.01.04 23:02) [30]
> 2 KEN :
>   Управление колесом нужно делать не через приложение сил
> к колесу,

Вопрос не через что, а куда моменты прикладывать. В какой системе координат.
Есть демка simple , в ней есть капсулы, возьми капсулу и попробуй ею управлять как колесом мотоцикла ( или катка ). Две кнопки - повороты, две - вперёд назад.
Могёшь ?


 
Alex Storm   (2004-01-25 09:11) [33]

Спасибо за помощь, Кен!

P.S.: Извини за такой вопрос частый :)


 
Stalker_23b   (2004-01-25 20:37) [34]

2 Кен : Нахрена тебе управлять колесом от мотоцикла без самого мотоцикла?


 
MrAngel   (2004-01-25 22:01) [35]

Это наверное нужно при столкновении со стеной и прочими обьектами ? :-)


 
Stalker_23b   (2004-01-26 01:14) [36]

Бред какой-то. Есть корпус, к нему с помощью джоинта привязано колесо, и его совершенно спокойно можно крутить, есть несколько методов (см. выше). Зачем катить колесо само по себе??? Но если все таки нужно, то вот как:
 dBodyAddForce - просто приложить силу к телу (в заданном направлении)
 dBodyAddForceAtPos - приложить силу к телу в точке в АБСОЛЮтнЫХ КООРДИНАТАХ, т.е. система отсчета не будет вращаться и перемещаться вместе с ним.
 dBodyAddRelForceAtPos - тоже самое, но в локальных координатах тела.

 Чтобы катить колесо, имхо надо просто прилагать силу к нему в должном направлении. Но все равно оно поворачивать не сможет, если оно одно. Ты пишешь симулятор одноколесного мотоцикла? :)


 
Кен ©   (2004-01-26 03:13) [37]


> Stalker_23b   (25.01.04 20:37) [34]
> 2 Кен : Нахрена тебе управлять колесом от мотоцикла без
> самого мотоцикла?

До целого мотоцикла ещё дорости надо. Если ты не можешь с одним колесом справиться, то где уж тебе целый мотоцикл управлять ?


> Stalker_23b   (26.01.04 01:14) [36]
> Но если все таки нужно, то вот как:
>  dBodyAddForce - просто приложить силу к телу (в заданном
> направлении)
>  dBodyAddForceAtPos - приложить силу к телу в точке в АБСОЛЮтнЫХ
> КООРДИНАТАХ, т.е. система отсчета не будет вращаться и перемещаться
> вместе с ним.
>  dBodyAddRelForceAtPos - тоже самое, но в локальных координатах
> тела.

А код то где ? Код, а не описания !


 
Кен ©   (2004-01-26 03:23) [38]

Ладно. Сообща будем писать мотоцикл. ( если конечно кто поддержит )
Изменения/дополнения к демке simple .

в uses дописываем Keyboard
...
var
 TempDyn1 : TGLODEDummy; // TGLODEDynamicBehaviour;

procedure TForm1.GLCadencer1Progress(Sender: TObject; const deltaTime,
 newTime: Double);
const
 cStep = 0.001;
var
 i : integer;
begin
 // -----------------
 // Прикладываем моменты, чтобы вращать и поворачивать колесо.
 // Требуется додумать как правильно их прикладывать
 // Управление клавишами adsw
 // Всё это часто вылетает с ошибками. Почему не знаю.
 if IsKeyDown("a") then begin
   if TempDyn1 <> nil then begin
     TempDyn1.AddTorque(AffineVectorMake(0,10,0));
   end;
 end;
 if IsKeyDown("d") then begin
   if TempDyn1 <> nil then begin
     TempDyn1.AddTorque(AffineVectorMake(0,-10,0));
   end;
 end;
 if IsKeyDown("w") then begin
   if TempDyn1 <> nil then begin
     TempDyn1.AddTorque(AffineVectorMake(0,0,10));
   end;
 end;
 if IsKeyDown("s") then begin
   if TempDyn1 <> nil then begin
     TempDyn1.AddTorque(AffineVectorMake(0,0,-10));
   end;
 end;
 // -----------------

 for i:=0 to Trunc(deltaTime/cStep) do
   GLODEManager1.Step(cStep);
end;

...

// Кнопка 2. Запихивает созданную капсулу в TempDyn1, чтобы ею можно было управлять.
procedure TForm1.Button2Click(Sender: TObject);
begin
 TempDyn1 := TGLODEDummy(ODEObjects.AddNewChild(TGLODEDummy));
 with TempDyn1 do begin
 // with TGLODEDummy(ODEObjects.AddNewChild(TGLODEDummy)) do begin
   Manager:=GLODEManager1;
   Position.SetPoint(Random,Random+3,Random);
   with TODEElementCapsule(AddNewElement(TODEElementCapsule)) do begin
     Position.SetPoint(0,0,0);
     Radius:=0.5*Random+0.25;
     Length:=Random+0.5;
   end;
   Color.Red:=0.5*Random+0.5;
   Color.Green:=0.5*Random+0.5;
   Color.Blue:=0.5*Random+0.5;

   VisibleAtRuntime:=True;
 end;
end;


 
Кен ©   (2004-01-26 03:40) [39]

Компилируем, запускаем, жмём на кнопку 2. Появляется капсула. Жмём на кнопки a s d w , чтобы её подкручивать. В результате она крутится чёрти-как, и всё это часто зависает.

Проблема в строчках
    TempDyn1.AddTorque(AffineVectorMake(0,10,0));
    TempDyn1.AddTorque(AffineVectorMake(0,-10,0));
    TempDyn1.AddTorque(AffineVectorMake(0,0,10));
    TempDyn1.AddTorque(AffineVectorMake(0,0,-10));

Как их правильно настроить, чтобы капсула нормально крутилась и поворачивала ?


 
Alek Aaz ©   (2004-01-26 14:09) [40]

2Ken
>Помоему где то годик назад ты нечто подобное уже писал. :)
Да помню, помню ... :) руки не доходят... Будет время - бильярд накропаю :)
Поддерживать мотоцикл не буду, т.к. не понимаю в ODE ничего. Перевел маленькую статейку о DelphiODE с материнского сайта. Ничего особенного, так, общие принципы. Может выложу куда...

2Alex Storm
Лучше с CVS не заморачиваться, на http://glscene.sourceforge.net/index.php болтается GLScene_SnapShot_231203.zip (4.2 MB). Вроде достаточно работоспособный snapshot :)

2Stalker_23b
>dJointSetHingeParam(TODejointHinge.jointID,dParamVel,10) - примерно так, через экспортную функцию ОДЕ, ты можешь влиять на СКОРОСТЬ вращения джоинта.
Думаешь кто-нибудь понял о чем речь? :) Особенно про джоинт :)
>А вообще - читайте хэлп по ОДЕ
Народ бъет себя в грудь, что читал. Но я давно заметил, что на родной мове материал почемуто лучше усваивается. Если буду переводить ODE User Guide поможешь?

Идея тут родилась. Не знаю, покатит или нет.
ИМХО. В принципе, SMD анимация это текстовый файл. На сайте http://www.geocities.com/stuart_gooding/ есть програмка Skeletal Mesh Collider (SMC) Editor описывающая smd модельку геометриями ODE (в основном капсулами). Берем анимацию (текстовый файл smd) и переводим в вид косточка-направление силы-время действия.
Только я не понял, еще формата smd анимации, но думаю, не сложно будет это сделать(мне кажется косточка должна быть вида x,y,z единичный вектор+h длина или xyz координаты начала и конца косточки в данный момент времени).
Скажем так:
кость: FingR01
направление: 1 кадр (получаем вектор косточки), 10 кадр (получаем вектор косточки)вычитаем один из другого, строим нормали  или что там необходимо и получаем вектор-направление, куда двигался конец косточки относительно своего начала(ну или как там это грамотно называется, пусть математики поправят) на протяжении 10 кадров.
Время действия силы - знаем что движение было 10 кадров, а кадров 24 в секунду (или сколько их там) тогда сила должна действовать на косточку 0,41666 секунды. Либо вообще не выставлять время действия, а гнать в константе покадрово. (скажем кость такая-то, направление такое-то, а в следующем кадре сменить направление) У косточки есть своя геометрия к ней и садим всякими dJointAddHingeTorque силы.
Причем не надо вычислять все силы дейстующие на косточку, а только ту которая "создается" роботом для выполнения движения.
При соприкосновении с чужой головой, туловищем или стеной ODE сама добавит нужные силы и нужные моменты. При накаутирующем ударе(когда робот впечатывается в стенку)силы "создаваемые" роботом можно убрать и он полетит как Нормально Летающий Объект. Или не убирать их. Будет как в китайских фильмах-литит кунфуист от полученного удара метров за 300, а сам в воздухе руками и ногами махает. Просто силу к роботу нужно приложить Большую, я бы даже сказал ЧУДОВИЩНУЮ. И тогда силы "создаваемые" роботом будут просто ничтожны и их можно будет не рассматривать. Для ярых реалистов сценарий нокаута: удар - потеря сознания (убрали "создаваемые" роботом силы)- робот валится на пол как мешок.
Так как это не чистая анимация то можно использовать не TActor, а TFreeForm или вообще разбить фигуру на три составляющие башка, тело с руками, ноги. Как в примере с моделькой md3 (Quake 3).    
Во... Наверное так лучше всего сделать.
>Фактически, чтобы робот хотя бы умел стоять, ему постоянно нужно совершать кучу телодвижений, чтобы самобалансироваться.
Нифига! Робот может ничего не делать если проекция центра массы робота не вышла за площадь его опоры (ступней). Скажем, стоит брусок, мы его отклоняем чуть и отпускаем. Если проекция центра массы вышла за площадь опоры, он упадет, если нет - вернется в первоначальное положение. Собственно, если проекция не вышла за пределы-че роботу волноваться? самобалансироваться - просто центр массы робота загоняется в площадь его опоры. Чем меньше площадь тем сложнее это сделать (на канате устоять простому смертному вообще невозможно).
Скажем для ног сделать следующие анимашки: стойки (у меня где-то самоучитель по ушу и карате был :) можно надергать оттуда), шаг вперед левой ногой, вперед правой ногой, шаг назад (левой, правой),шаг в сторону (левой, и правой ногой), перекрестный ход. Про всякие маваши-гири пока забываем.
Скажем робот "работает" в стойке его выводят из равновесия ударом чего-нибудь (например кулака :), но для эксперимента можно в него шарики тяжелые пулять). Если центр массы его не сместился критически он ничего не предринимает, если появилась угроза опрокидывания, делает шаг назад или в бок. В общем никаких нейросетей, простая геометрия. Хочет двигаться вперед, смещает центр массы вперед и делает шаг. Мля... Мне проще на листке нарисовать :) ...
Мля... устал писать... Ладно, подумаю, завтра допишу...



Страницы: 1 2 вся ветка

Форум: "Игры";
Текущий архив: 2004.09.19;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.61 MB
Время: 0.038 c
6-1089715824
stud
2004-07-13 14:50
2004.09.19
поиск каталога и копирование файлов по сети


1-1093983709
dms_main
2004-09-01 00:21
2004.09.19
dll


1-1093956323
Uran
2004-08-31 16:45
2004.09.19
Подскажите какие лучше использовать компоненты


1-1094119866
Shurik_snz
2004-09-02 14:11
2004.09.19
Как в TTreeview изменить цвет текста узла?


3-1093217295
Anarki
2004-08-23 03:28
2004.09.19
Соединение с базой данных MS Access, защищённой паролем





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский