Як імітувати падіння пір'я в box2d?


10

Я працюю з AndEngine з розширенням Box2d, але загальна відповідь або ідея концепції також будуть оцінені.

Я маю пероподібні об’єкти у світі двовимірного погляду, що я хочу бути частиною фізичного моделювання. Я використовую лінійне демпфірування, щоб змусити "перо" падати повільно. Це може бути не гарною ідеєю, можливо, я повинен скоріше застосувати силу при кожному оновленні, але, тим не менш, це працює, і це робить об'єкт виглядати "легким", і відчувається, що є повітря з опором.

Тепер, як я можу зробити так, щоб предмети насправді виглядали як пір’я, що падають через повітря?

Зокрема, я шукаю два типи об’єктів: Довгі з низькою щільністю, які повинні рухатися вниз повільним коливальним рухом і квадратні об'єкти, які просто довільно змінюватимуть траєкторію. Було б чудово, якби це могло бути одне моделювання, а довжина була б параметром - чим довше об’єкт, тим більше він буде гойдатися. Зараз я хочу імітувати пір’я, листя та сніжинки у світі мультфільмів.

Шляхи падаючих предметів


2
Як щодо ескізу скріншоту чи концепції чи чогось подібного? Зрештою, є багато різних речей, які ви можете розглянути пір’ям, і я б сказав, що більшість поводиться по-різному залежно від вашої ситуації.
Маріо

Додано більше інформації та зображення.
MartinTeeVarga

Відповіді:


6

Так само, як приземлення місяця, ви повинні підробити його . Фізика автотротації, спричиненої трепетом, ударами та вихором, є складною. Існують статті про моделювання цього ефекту , і вони створюють чудові анімації на Java .

Але я б навіть пішов далі у вашу фабрику і здійснив щось на зразок зростаючої синусоїди, щоб оживити рух.

введіть тут опис зображення

Очевидно, ви захочете налаштувати початкові значення, швидкість незалежного збільшення амплітуди та частоти, поки не отримаєте щось, що виглядає ближче до того, що ви хочете. Ви хочете, щоб деякі випадковості були кинуті, щоб зробити це цікавим. Крім того, як показує ваш приклад, дуже легкі об'єкти з великою площею поверхні можуть насправді підніматися біля країв їх хвиль. Отже, хвилі вище певної амплітуди повинні починати визначати величину, що збільшується, з малим обмеженим максимальним значенням.

Чим менше маса і більше поверхні поверхні об'єкта, тим більше ви збільшуєте амплітуду і частоту синусоїди. Більша маса та менша площа поверхні повинні спричинити зменшення амплітуди та частоти.


3
** Змовник **
Миколай Marcisz

Гаразд, я можу мати дві функції: зростаюча синусоїда, яка буде керувати горизонтальним рухом, потім деяка функція, яка керуватиме вертикальним рухом, і, ймовірно, буде залежати від того, наскільки далеко від центру знаходиться об'єкт, і буде мати шапку, яка порушить рух і відправте її назад ... Якщо я зрозумію таку комбіновану функцію, яка дасть мені силу, як я застосувати силу? У кожної галочки двигуна трохи залежно від часу, що минув? Я раніше не дуже працював з box2d.
MartinTeeVarga

Схоже, це буде добре працювати, дозволяючи гравітації впоратися з рештою. Існує кілька різних способів поводження з силою. Ймовірно, це було б у кожному галочці двигуна, виходячи з часу, який минув, як ви кажете. Вони були б імпульсними силами, тобто миттєвими для цього кадру. Дивіться це питання, щоб дізнатися більше (це те саме, навіть якщо ви не використовуєте Cocos2D, як у запитанні).
MichaelHouse
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.