3D-интерактивность и скульпт-демо

27.07.2007 Антон Волков

Месяца полтора назад ещё в 3D-движке 2-й версии мы делали механизм интерактивного взаимодействия с 3D-объектами. Самым простым решением было бы переводить MouseEvent в 3D-пространство. Однако, оказалось, что при сравнительно большом количестве полигонов (уже при 1000) система событий Flash начинает ощутимо тормозить при любом сдвиге мыши. Дело в том, что MouseEvent’ы достаточно универсальны и потому медленны, ведь надо событие пробублить (отправить от источника к сцене через всех родителей), да ещё не забыть посчитать координаты мыши относительно каждого объекта.

В итоге решили отказаться от mouseEnabled полигонов, ловить мышиные события с хит-области камеры, а дальше через getObjectsUnderPoint ловить попавшие в точку полигоны и далее делать обработку. Тогда мы это успешно реализовали и даже сделали свой 3D-бублинг, когда каждый клик проходил через грани, 3D-объекты и т.п. вполть до камеры.
К сожалению, отработка MOUSE_MOVE и, соответственно OVER и OUT оказалась медлительной.

В новой третьей версии благодаря наличию математической модели содержимого камеры мы смогли сделать систему интерактивности полностью на математических расчётах. Благодаря нюансам и всяческим оптимизациям удалось даже легко отрабатывать и MOVE, и OUT и OVER, в том числе пообъектно. От 3D-бублинга мы отказались, т.к. он для наших нужд не пригодился. Если что - легко добавить.

В качестве эксперимента небольшие кривоватенькие демки скульпт-редактора:

  • Space+мышь — повороты камеры
  • Нажатие на объект — выгнуть грани
  • Ctrl+нажатие — вогнуть

2007-07-27_195316.jpg 2007-07-27_195503.jpg 2007-07-27_195231.jpg

Комментарии (3) на “3D-интерактивность и скульпт-демо”

  1. Rostislav Siryk Says:

    То есть вам удалось создать свой, полностью независимый от рендеринга процесс отлова событий мыши, происходящий исколючителньо в трехмерной матмодели?

    Скульптинг легкий, как лепка из пластилина :)

  2. Антон Волков Says:

    Именно так! Полностью на математике. Оказалось, что даже при постоянном движении мыши мы в производительности практически ничего не теряем (редко 1-2 FPS из 100), в то время, как при использовании MouseEvent (при большом количестве спрайтов на сцене) систему вырубало до 20 FPS.

    В итоге бОльшая часть разработки сводится не к расширению базового функционала, данного нам Adobом, а тотальная перепись и отказ от всяческих излишеств. Согласен, наши требования к производительности очень жёсткие и в большинстве случаев можно пользоваться тем, что есть.

  3. Антон Волков Says:

    Сам скульптинг крайне неудобен и сделан только лишь для эксперимента. Если прорабатывать этот способ моделинга, надо делать более серьёзную математику с учётом текущей геометрии, взаимного влияния граней и т. п. Так что не судите строго :)

Оставить комментарий

(Регистрация)

Powered by WP Hashcash