HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Физика
Решил написать свой физический движок
Страницы (5): [1] 2 3 4 5 »   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



Физика

Всем здрасте, давно я сюда не заходил....
Началось всё так: что-то стукнуло мне по башке и я решил написать свой физдвижок. Причём на ФПС и т.д. мне было наплевать Мне для начала хотелось написать просто физику, которая бы была похожа на настоящую. Сначало всё шло хорошо, колижн детектор очень хорошо получился. Но дальше надо было писать солвер. Так как я только в 9 класе, у меня нету необходимых знаний по физике. Но всё же, я решил сделать для начала физку хотябы без учёта угловой скорости. Вот что из этого получилось: http://rghost.ru/42319766

Да, знаю, это физикой назвать сложно, но всё же она почти как в ХЛ =)
Потом я всё таки попытался добавить вращение, и получилось из этого нечто нехорошее:
http://rghost.ru/42320019

А теперь просьба к знающим людям ( к ксероксу, в волатиле помойму норм физика, или к ДМу, ведь в ксаше тоже есть физика ), помочь мне доделать мой физдвижок, а именно вращения, или хотябы обьяснить, как высчитываеться угловая скорость и привести все необходимые формулы
Зарание спасибо

Добавлено 17-12-2012 в 22:03:

Сомневаюсь, но возможно в поиске проблем вам поможет кусок кода:

C++ Source Code:
1
void CSolver::SolveCollision( CollisionPoint CP )
2
{
3
  s_ConvexObject &A = gConvexObjects[ CP.a ];
4
  s_ConvexObject &B = gConvexObjects[ CP.b ];
5
  Vector normal = CP.SA.axis;
6
  Vector ContactPoint = CP.point;
7
  normal.Normalize();
8
 
9
  Vector relativeVelocity = ( B.linearVelocity + CrossProduct( ContactPoint - B.origin, B.angularVelocity ) )
10
  - ( A.linearVelocity + CrossProduct( ContactPoint - A.origin, A.angularVelocity ) );
11
  float velocityProjection = DotProduct( relativeVelocity, normal );
12
  if( velocityProjection >= 0 )
13
    return;
14
  float ImpulseA;
15
  float ImpulseB;
16
 
17
  if( !A.invMass )
18
  {
19
    ImpulseA = 0;
20
    ImpulseB = velocityProjection;
21
  }
22
  else if( !B.invMass )
23
  {
24
    ImpulseA = velocityProjection;
25
    ImpulseB = 0;
26
  }
27
  else
28
  {
29
    ImpulseA = ( 1 / B.invMass ) / ( 1 / A.invMass + 1 / B.invMass ) * velocityProjection;
30
    ImpulseB = ( 1 / A.invMass ) / ( 1 / A.invMass + 1 / B.invMass ) * velocityProjection;
31
  }
32
 
33
  A.linearVelocity =
34
  A.linearVelocity + normal * ImpulseA;
35
  B.linearVelocity =
36
  B.linearVelocity - normal * ImpulseB;
37
 
38
  // Если не делить на 100500, то вращение будет очень быстрое
39
  A.angularVelocity = A.angularVelocity
40
  + CrossProduct( normal * ImpulseA, ContactPoint - A.origin ) / 100000000;
41
 
42
  B.angularVelocity = B.angularVelocity
43
  + CrossProduct( -normal * ImpulseB, ContactPoint - B.origin ) / 100000000;
44
 
45
}

Сообщить модератору | IP: Записан
Сообщение: 111408

Старое сообщение 17-12-2012 19:03
- За что?
 XaeroX
Crystice Softworks

Дата регистрации: Oct 2005
Проживает: Торонто
Сообщений: 35036
Нанёс повреждений: 514 ед.
Возраст: 38

Рейтинг



Награды
 
[1 награда]


ONeiLL
Я в физике ничего не понимаю, в волатиле - Newton Game Dynamics.

Цитата:
ONeiLL писал:
как высчитываеться угловая скорость и привести все необходимые формулы

Наверное, надо гуглить "момент инерции", "теорема штейнера" и т.п...

__________________

Сообщить модератору | IP: Записан
Сообщение: 111409

Старое сообщение 17-12-2012 19:06
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



XaeroX спс, буду искать инфу =)

Сообщить модератору | IP: Записан
Сообщение: 111411

Старое сообщение 17-12-2012 19:07
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



вы уже определились что мы подразумеваем под "angular velocity" ?
Я надеюсь это значение потом не берется как углы эйлера?
А насчёт написания собственной физики - бесполезное занятие. Никто не оценит. Симуляторы физики очень плотно привязаны к ряду негативных факторов, таких как конечная точность вычисления чисел с плавающей точкой, проблемы округления чисел из сопроцессоров до "форматных" дабла и флоата, таймер и влияние фризов на его работу, собственно тип солвера, метод работы коллижен детектора и еще сотни других тонкостей. Обычно эти самописные движки либо проваливают тела при каждом удобном случае либо конструкции составленные из тел крайне нестабильны либо это всё дико тормозит, а чаще - всё вместе.

Но кое-какая практическая польза всё же наличествует. Понимая что ты делаешь тебе будет потом проще прикрутить готовый физ.двиг к своему движку. А практика показывает, что там еще поверх придется дописать тонны кода. Да вот пример из практики, так сказать. Допустим PhysX - коробки, ящики, всё хорошо. Мы хотим взаимодействовать с игроком тоже.
Мало этого - игрок хочет взаимодействовать с окружением тоже. Я напомню что это две абсолютно разные вещи. Т.е. когда игрок толкает ящики - это одно, а когда ящики толкают игрока - совершенно другое.
Но при этом конечно хочется сохранить оригинальную халфовскую физику, лазанье по лестницам и прочее. И как быть? В Физиксе нету нормальных методов для управления игроком. То, что есть, назвать нормальной реализацией язык не поворачивается. Игрок постоянно стрянет в этих объектах, либо упорно их выдавливает куда попало.
Причём в своих же собственных демках (я про PhysX). Что делать?
Я над этой проблемой размышлял почти три недели. И надо признать, без ложной скромности - разрешил, хотя и не до конца, но лучше чем в Source.
Во всяком случае, многие мне говорили, что в ксаш-моде взаимодействие игрока и физтел приятнее реализовано. Вот для всего этого - действительно надо знать и понимать как оно устроено. А своё писать - да ну нафиг.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 111413

Старое сообщение 17-12-2012 19:25
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



Дядя Миша я пишу для самообразования

Цитата:
Дядя Миша писал:
Я надеюсь это значение потом не берется как углы эйлера?

Конечно же нет

У меня в движке только ФПС проседает сильно, ну и нету поворотов. Вот так.... Уже пол дня долбусь с этими вращениями

Добавлено 17-12-2012 в 22:35:

Вот последняя демка, только без вращений
http://rghost.ru/42321402

Сообщить модератору | IP: Записан
Сообщение: 111414

Старое сообщение 17-12-2012 19:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



Ну а что ты хотел? Вращение - это всегда непросто. Это же не взаимодействие одного тела с со статической геометрией. Это взаимодействие двух тел, и каждое столкновение влияет на оба тела.
В результате система либо идёт вразнос (когда кубики "взрываются"), либо успокаивается через определенное время. ЧСХ, успокоить систему без слипера крайне непросто. И очень мало движков может этим похвастаться.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 111415

Старое сообщение 17-12-2012 19:37
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



слипер - что это? Гугл молчит =( Или я плохо ищю

Сообщить модератору | IP: Записан
Сообщение: 111416

Старое сообщение 17-12-2012 19:39
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



Слипер? Ну вот то условие после которого тела засыпают и солвер для них не вызывается. Простейший аналог в халфе - флаг FL_ONGROUND.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 111417

Старое сообщение 17-12-2012 19:42
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



Дядя Миша, аа, понял.
У меня Солвер прекращает работу если тела больше не проникают друг в друга

Сообщить модератору | IP: Записан
Сообщение: 111418

Старое сообщение 17-12-2012 19:44
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 111420

Старое сообщение 17-12-2012 20:47
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



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

Теперь кубики не взрываются =) Но и не успокаиваются
http://rghost.ru/42333874

Сообщить модератору | IP: Записан
Сообщение: 111429

Старое сообщение 18-12-2012 12:55
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 33041
Нанёс повреждений: 392 ед.

Рейтинг



не успокаивается, потому что реституции нету )

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 111445

Старое сообщение 18-12-2012 15:32
-
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



Дядя Миша , обязательно попытаюсь её реализовать

Сообщить модератору | IP: Записан
Сообщение: 111462

Старое сообщение 18-12-2012 16:00
- За что?
pRoxxx
Житель форума

Дата регистрации: Jan 2011
Проживает: UA DP
Сообщений: 360
Возраст: 33

Рейтинг



Цитата:
ONeiLL писал:
Дядя Миша, я не уверен что даже отдельно я его сделаю. Поэтому сначала буду пилить как отдельный движок, а потом уже......

Теперь кубики не взрываются =) Но и не успокаиваются
http://rghost.ru/42333874

LOL как на батуте, а что за рендер такой ужасный?

Сообщить модератору | IP: Записан
Сообщение: 111463

Старое сообщение 18-12-2012 16:00
- За что?
ONeiLL
CrazyUkrainian

Дата регистрации: Dec 2011
Проживает: Украина, Житомир
Сообщений: 562
Возраст: 27

Рейтинг



pRoxxx OpenGL без всяких плюшек. Тупо треугольники рисовал и в нормаль красил

Сообщить модератору | IP: Записан
Сообщение: 111465

Старое сообщение 18-12-2012 16:14
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 05:12. Новая тема    Ответить
Страницы (5): [1] 2 3 4 5 »   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > Half-Life SDK > Физика
Решил написать свой физический движок
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024