Созданияприложенийссимуляциейфизики
Встатьебудутрассмотреныследующиедвижки:
Ammo.js
Cannon.js
Oimo.js
box2dweb
Unity3D WebGL
Основнойбельвыбратьнаиболеепроизводительный,
Ammo.js
子弹物理引擎使用 javascriptсиспользованиемкомпилятораEmscriptenипозаявлениюразработчикиобладаетп ФанкционалAmmo.jsдействительнообширен。 Дляработыснимпонадобитсяотдельнаябиблиотекадлявизуализации。 Three Three.js 。 Приэтомкаждыйциклперерисовкипридётсявручнуюсинхронизироватьположениеивращениекаждогообъектанасценесегофизическоймоделью,движокнеделаетэтоавтоматически。
Чтокасаетсяпроизводительности,оннеслишкомвысокая,ноизаметныхпросадокfpsвбольшинстве。
APIиногдаможетбовтдовольнозапутаннымидокументациянеособопомогает。
Вцеломоченьхорошийинструмент,которыйпродолжаетразвиватьсяидорабатываться。
Cannon.js
Cannon.js —是从движоксоткрытымисходнымкодом。 请使用javascriptипозволяетиспользоватьвотличиеотличиеотличиеотличиеотличиеотличиеотличие 。 Насамомделесложносказать, Темнеменееcannon.jsпосравнениюсammo.jsсчитаетсяболеекомпактным,болеепроизводительным,атакжеболеелегкимдляпонимания,ноприэтомоннеобладаеттакимколичеством функций 。 Напрактикеихпроизводительностьчастопримерноодинаковая。
Процессработысдвижкомдовольнопрост:

Дляработытакжетребуетсясторонняяграфическаябиблиотека,причёмпридётсякаждыйциклотрисовкивручнуюперемещатьсоответствующийобъектнасцененаместорасположенияфизическогообъекта。

Вданныймоментдвижокпрактическинеразвивается,последняяактивностьврепозиториипроектаболее2летназад,анатотмоментдвижокещётольконачиналразвиваться,такчтовнекоторыхместахонможетоказатьсянепроработан。
Oimo.js
Oimo.js —在OimoPhysics上使用javascript 标记 。 Всравнениисдругимирешениями,обладаеточеньхорошейпроизводительностьюиточностью,однакоподдерживаеттолькопримитивнуюгеометрию(кубыисферы)。 巴比伦(Babylon.js)的照片—从2D到3D的графики,поэтомукакихтодополоинетельны

Большимминусомдвижкаявляетсянеоченькачественнаядокументация,норазработчикипродолжатра。
Наданныймоментдвижокпродолжаетразвиваться。
box2dweb
box2dweb —使用javascript的 box2d。 Какпонятноизназвания,специализируетсянасимуляции2Dфизики。 Несмотрянаэто,box2dweb —довольномощныйинструмент,которыйнискольконеотстаётотсвоихтрёхмерных。 Напримердвижоквключаеткрайнеудобныесистемыобнаруженияколлизийиимитациисоединений( 约束 )。
токасаетсяпроизводительности,нужнооченьпостаратьсяписатьнеоптимальныйкод,чтобыпоявили。
ИзплюсовтакжестапростотуAPIиудобнуюдокументацию。
Unity3D
Unity3D —使用кросс-платформенныйигровойдвижок。 使用拖放3D-ки的Включаетудобный拖放редакториобширныйинструментарийинструментарий。 ПоследняяверсиядвижкадлянаписанияигровойлогикиподдерживаетC # 。
统一 PhysX,PhysX和PhysX的 имеетвстроеннуюсимуляциюфизики NVIDIA 。 PhysX物理 даётобширныйфункционалпосимуляциифизикитвёрдыхтел,жидкостейитканей,обладаеточеньхорошейпроизводительностью,хотямногиеплюсыаннулируютсяприработенаграфических ускорителяхнеот NVIDIA。 Крайнеприятнымфактомявляетсято,чтос3декабря2018исходныйкоддвижкадоступенподоткрытойлицензиейBSD-3,темнеменеедвижокслишкомсложный,чтобыпытатьсяпереписыватьегоподсебяилиразбиратьсявегоустройстве,такчтотутлучшепоможетдокументация。
使用Unity WebGL,Unityоказался,посколькусуществуетвозможностьсобратьпроектнанёмподWebGL。 Дляэтогодостаточновнастройкахсборкивыбратьсоответствующийпункт。

ТемнеменееWebGL的 версия 统一 всилуособенностейсвоейархитектуры(трансляциякодаизC#вС++идалеев 的JavaScript),имеетрядпроблемспроизводительностью,потреблениемпамятииработоспособностьюнамобильныхустройствах,инепохоже,чторазработчикисобираютсясэтимчто -тоделатьвближайшеевремя。 Поэтомуданныйвариантнепользуетсяпопулярностьюиянестануегоподробнорассматривать。
Сравнениепроизводительности
Сравнимпроизводительностьдвижковпотому,каконисправляютсясобработкойколлизийбольшогокок。 Используемыйбраузер— Firefox 64.0.2 x64。

ПорезультатамтестовOimo.jsпоказываетлучшуюпроизводительность。
Разумеется,этирезультатынедаютадекватнойоценкипроизводительности,таккакзависятотмножествастороннихфакторов,нополноценноеисследованиепотребовалобыкудабольшевременидаиятакойцелисебенеставил。 Крометогозаметно,чтопроизводительностьвсехсравниваемыхдвижковдовольноневелика,такчтоданныерешенияподойдутдлянаписаниядалеконекаждойигры,нозатохорошоподойдутдлясозданиянебольшихдемо。
Вывод
Вцелом,выборконкретногодвижказависитотпоставленнойзадачи。 Еслитребуетсяпростойвпониманииилегкоосваиваемыйдвижок— хорошоподходитСannon.jsилиOimo.js 。 Еслитребуетсябольшефункционала, лучшеиспользоватьAmmo.js 。 Вопределённыхситуациях,еслибольшаяпроизводительностьнетребуется,можнопопробоватьиспольз。