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+нажатие — вогнуть

06.08.2007 в 21:33
То есть вам удалось создать свой, полностью независимый от рендеринга процесс отлова событий мыши, происходящий исколючителньо в трехмерной матмодели?
Скульптинг легкий, как лепка из пластилина :)
06.08.2007 в 23:27
Именно так! Полностью на математике. Оказалось, что даже при постоянном движении мыши мы в производительности практически ничего не теряем (редко 1-2 FPS из 100), в то время, как при использовании MouseEvent (при большом количестве спрайтов на сцене) систему вырубало до 20 FPS.
В итоге бОльшая часть разработки сводится не к расширению базового функционала, данного нам Adobом, а тотальная перепись и отказ от всяческих излишеств. Согласен, наши требования к производительности очень жёсткие и в большинстве случаев можно пользоваться тем, что есть.
06.08.2007 в 23:30
Сам скульптинг крайне неудобен и сделан только лишь для эксперимента. Если прорабатывать этот способ моделинга, надо делать более серьёзную математику с учётом текущей геометрии, взаимного влияния граней и т. п. Так что не судите строго :)