фізичний движок

Я почав займатися розробкою свого фізичного движка для alternativa3d. Вирішив написати в цій міні-статті варіанти реалізації движка. Для того, щоб написати свій движок, в першу чергу вам може знадобитися підручник 9-ого класу. Шукаємо найближчу школу, і купуємо підручник фізики 9-ого класу за 9 смаженок))) Потім, я похитав всяких cpp, python Сорс, книжок по реалізації 3д фіз. движка. Подивився в це все справа. І прийшов до висновку, що все просто))) Насправді тут взагалі нічого складного немає. Звичайно, зізнаюся, перед тим як я сідав робити його, мені було трохи не по собі. Якось це все масштабно виглядало ... Але ... "очі бояться, руки роблять"!) Вважаю, що далі викладений матеріал є дуже корисним і дає уявлення про те, як реалізовувати фізичний движок. Для реалізації движка вам потрібно поетапно визначитися з методами реалізації:

Rigid-body (RBE) або mass-aggregade (MAE, сукупність мас) движок?

RBE розглядає об'єкти як ціле. Він прораховує рух і поворот об'єкта в цілому.
MAE розглядає об'єкт як сукупність мас. Наприклад, куб можна розглянути як сукупність 8 мас в кожному його кутку, пов'язаних між собою.
Логічно припустити, що MAE легше обчислюється, тому що йому не потрібно знати, що таке поворот, тому що працюють 8 мас, прорахунок руху об'єкта зводиться до прорахунку лінійного руху кожної маси, в результаті якого з'являється поворот.
Так само слід зазначити, що для перетворення MAE в RBE можна просто додати повороти.

Як будуть взаємодіяти об'єкти?

Тут є три шляхи:
1) Перевіряти кожного з кожним (найпростіший вихід). Але тут можуть виникати питання в плані реалізації. Наприклад, одне взаємодія може бути порушено іншим, і це може суттєво позначитися на результаті.
2) Доповнити перший варіант перевіркою всіх взаємодій один з одним і кінцевий результат обчислень привласнювати всіх об'єктах одночасно. Досить складний шлях вирішення цього питання - дуже складна математика, часом може бути навіть неможлива) Але, тим не менше, як варіант його розглядати можна.
3) Чи не використовувати Ньютона, створити свої власні закони поведінки або просто псевдо-фізику

Сила або імпульс?

Напевно ви бачили реалізацію в 3д двигунах, коли об'єкти сіпається, хоча повинні просто лежати і не рухатися. Це дуже часто відбувається в движку, в якому використовуються імпульси. Звичайно, даний варіант реалізовується легше і працює швидше, але більш надійний варіант - використовувати сили (механіка, підручник 9 класу). Чому все-таки об'єкти можуть смикати? Візьмемо простий приклад. Лежить книга на столі ...
а) В імпульсному варіанті. Вона залишається лежати на столі, завдяки багатьом дрібним колізій. І з кожним кадром, книга буде отримувати ці значення колізій, саме тому книга може злегка "вібрувати".
б) У силовому варіанті. Вона просто підтримується постійною силою. В даному випадку, силою реакції опори.

Так само реалізацію можна розділити на слід. етапи (сподіваюся логічно):
1) Реалізувати простеньку систему частинок. Векторна математика. Закони руху.
2) MAE, підключення дрібних мас до будь-якого типу об'єктів, і їх з'єднання
3) Rigid-Body Physics, прикручуємо повороти
4) Collision Detection
5) Вибираємо фізику взаємодії
6) У майбутньому, доповнюємо всякими фішками.

Хочеться відзначити, що найскладніше (втім, як і скрізь і завжди) виявилося придумати грамотну структуру, для того, щоб потім движок легко підключався, налаштовувався і т.д.

Please share:

Схожі статті