Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [Nape] Траектории взаимодействий физ.объектов(Nape, Box2D) оптимизация (http://www.flasher.ru/forum/showthread.php?t=186034)

uglan 26.10.2012 13:30

Траектории взаимодействий физ.объектов(Nape, Box2D) оптимизация
 
Всем привет!

Есть некая сцена с падающими по разным траекториям физ объектами. Задача: отрисовать траектории объектов сцены до того как они начнут непосредственно взаимодействовать) После запуска симуляции нарисованные траектории и движения объектов должны совпадать.

Cейчас для просчета и симуляции используется Nape(в Box2D на просчет уходит в 10 раз больше времени, 300ms против 30); Просчет производится следующим образом создается копия сцены со всеми объектами ускоряется симуляция space.step() в цикле и относительно позиций объектов рисуются траектории в спрайте. По окончанию цикла объекты удаляются и запускается симуляция физики уже в реальном времени. Объекты повторяют нарисованные траектории т.к. сцены идентичны. Все вроде бы хорошо. НО! Проблема в том что есть объекты учитывающие положение курсора мыши, и соответственно траектории должны быть изменены на каждую новую позицию. На каждый перепросчет уходит по 30 ms, и в динамике это выходит очень много.

Вопрос: Как можно оптимизировать данную процедуру? Чтобы снизить время просчета хотя бы до 1-2 ms. Есть идеи?

Спасибо!

p.s. Восстановление положения объектов на старте вместо повторного создания ускоряет процесс на ~10 ms, но появляются большие погрешности т.к. объекты участвуют в симмуляции на момент восстановления и их позиции варьируются на каждый step.

vorodis2 26.10.2012 17:49

Да ни как. Ваш мир должен же пересчитаться, а на это в любом случии будет уходить время. Я бы извротился в другую сторону. У вас есть 2 сцены одна визуализатор, другая симулятор (рабтает в 20 раз быстрее), после окончания работы симулятора замисываеш траекторию, и опять запускаеш, а после второго цыкла визуализируеш красиво изменение траэкторий, ну и так далие. Так же на втором и после цикле работы симулятора не создаюш заново объекты а возвращаеш старые обьекты в позиции визуализатора. Так же не рекомендую space.step() запихивать в цикол, будут дергания, просто у тебя должн симулятор работать в 20-100 раз быстрее визуализатора. ХЗ это мою мнение.

uglan 26.10.2012 18:16

Не совсем понял.
Цитата:

после окончания работы симулятора замисываеш траекторию, и опять запускаеш
Я в цикле не вызываю отрисовку, то есть движок просчитывает сцену не перерисовывая объекты, то есть по сути это и есть симулятор. Единственное можно действительно отсюда исключить отрисовку траектории, а писать данные в <Vector> например. Но тут прирост будет максимум на 1-2 мс.

Цитата:

Так же на втором и после цикле работы симулятора не создаюш заново объекты а возвращаеш старые обьекты в позиции визуализатора.
Об этом я также писал здесь:
Цитата:

p.s. Восстановление положения объектов на старте вместо повторного создания ускоряет процесс на ~10 ms, но появляются большие погрешности т.к. объекты участвуют в симмуляции на момент восстановления и их позиции варьируются на каждый step.
Но там имеет место другая проблема.

Цитата:

Так же не рекомендую space.step() запихивать в цикол, будут дергания, просто у тебя должн симулятор работать в 20-100 раз быстрее визуализатора.
Такой прирост скорости выглядит заманчиво, но можешь пояснить что ты имеешь в виду под "симулятором" в данном случае? Не понимаю как можно запустить "симулятор" в Nape взамен space.step() в цикле?


Часовой пояс GMT +4, время: 00:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.