Производительность ammo.js в Google Chrome - PullRequest
3 голосов
/ 05 января 2012

Мы с другом разрабатываем игру с использованием WebGL, и после поиска некоторых физических движков я обнаружил ammo.js, который является портом или библиотекой физики пули. Мы реализовали простой пример и быстро обнаружили, что частота кадров в Google Chrome ужасна по сравнению с Firefox или Safari. Я говорю, что Chrome получает 10 FPS, тогда как Firefox достигает почти постоянных 60 FPS.

После многого исследования я обнаружил этот блог, объясняющий, в чем конкретно проблема Chrome с библиотекой. (tl; dr: ammo.js использует объекты словаря, которые не поощряет Chrome)

Итак, мои вопросы: есть ли порт этой библиотеки без использования словарей? Если нет, стоит ли (или даже возможно) изменить исходный код маркера C ++ и перенести его? Если ни один из предыдущих вариантов невозможен, какой физический движок в javascript вы бы порекомендовали?

Я знаю, что выбор здесь довольно ограничен, но я думаю, что это стоит вопроса.

Спасибо.

1 Ответ

3 голосов
/ 10 января 2012

Я сомневаюсь, что возможно портировать код на JavaScript и не использовать объекты, когда исходный код C ++ является объектно-ориентированным.

Если вы хотите «изменить» код Bullet перед переносом, я думаю, вам придется переписать его, чтобы он использовал что-то, что имеет преимущество в JavaScript: типизированные массивы. Я думаю, вам придется переписать большую часть кода, чтобы получить его таким образом. И в этом случае было бы удобнее написать JavaScript напрямую.

У меня нет хороших рекомендаций для вас, кроме ammo.js. Однако cannon.js - это недавно запущенный проект, который может удовлетворить ваши потребности, когда его код станет стабильным. Возможно, вы хотели бы внести свой вклад в это?

Другой путь может быть FireBreath . Это фреймворк для разработки плагинов для браузера. Это может помочь вам сделать нативные функции JavaScript. Если Bullet скомпилирован в такой плагин, и привязки сделаны к JavaScript, то у вас есть готовый к использованию физический движок C ++ в JavaScript. Конечно, конечный пользователь должен сначала загрузить плагин.

...