воскресенье, 13 ноября 2011 г.

Мое первое знакомство с Adobe Stage3D. Часть вторая.

Всем привет. Несмотря на последние события относительно Adobe Flash, я все же решил потратить эти выходные на дальнейшее знакомство со Stage3D API. В прошлом посте я писал немного на эту тем, а в этот раз я кинул взгляд на framework под названием Proscenium.
Ну, что я могу сказать о Proscenium, по сути, я не использовал его на все 100%, единственное, что я сделал – запустил примеры, идущие с этим framework, поэтому не могу полностью оценить этот продукт. Я изучил структуру всех примеров и могу сказать, что она вообщем не сложная, а даже наоборот, очень и очень простая, как кирпич. API Proscenium очень сильно похоже на API DisplayObject, тут тоже есть связь дочерний контейнер/родительский контейнер. Судя по документации, классов не так уж много, но я нашел все что искал, там есть и поддержка скелетной анимации, и возможность создавать свои материалы, и несколько типов источников света, различные инструменты и утилиты для загрузки формата Collada, короче там есть многое. Жаль конечно что на своей технике я не могу полностью поработать со Stage3D API, но мне действительно хочется. Proscenium напомнил мне старый добрый PaperVision3D, они конечно не похожи, но что-то родное я все-таки встретил, хотя и сам не знаю что именно
В целом работать с Proscenium мне понравилось, поэтому у меня еще больше обострилось желание наконец-то купить себе новое современное оборудование. К сожалению Proscenium сейчас находится в Adobe Labs, то есть официального релиза еще не было, но скачать его уже можно. Если хотите отличный framework, для нового Stage3D API, то быстрее бегите на эту страничку. Ну, и несколько переписанных мною собственноручно примеров использующих Proscenium. К сожалению, включить «тени» я так и не смог, у меня fps падало до 0,01, поэтому теней нет:
Фреймворки это конечно хорошо, но на досуге я попытался дальше развивать свои отношения со Stage3D. Я попытался вывести обычный куб, в теории все так просто, всего лишь восемь полигонов, а на практике – это неудобно. Действительно, мне показалось не очень удобным рассчитывать все индексы отрисовки треугольников, а их не мало, для куба получилось 3 * 8 * 2 = 42 индекса. Уже сейчас меня посещают мысли, что без использования загрузчика моделей не обойтись, а то при раcсчитывании всех индексов куба я чуть не умер со скуки, а если бы это была много полигональная модель – я бы точно умер. Да, вот такое оно суровое Stage3D API. И так, кое-как я все же отобразил куб, разукрасив каждую его сторону определенным цветом:
Как видно все куда более примитивно, даже текстур нет, поэтому долго не думая, я натянул текстуры на куб. К счастью я уже более-менее начал разбираться в шейдерном языке AGAL, и написание фрагментного шейдера у меня не вызвало огромных проблем, но в целом получилось вот это:
Да, это еще примитивнее, а сделать что-то посложнее нет времени и знаний. Впрочем, в следующий раз я займусь этим, так как у меня есть некоторые вопросы, например, если есть два куба, для каждого есть VertexBuffer и IndexBuffer, и геометрия одного из них пересекает другой куб, то как мне отрисовать правильно эти кубы, вычислять кто именно будет первым отрисовываться? Впрочем, вопросов много, и надо будет на следующих выходных что-то разобрать из этого списка.
Ну, и закончу пост неким выводом. Хоть сейчас не лучшее время у Adobe Flash, и по текущим событиям и заявлениям Adobe не понятно, что будет дальше, я все-же решил интересоваться Stage3D API, я даже сам не могу объяснить почему, с одной стороны не хочется терять знаний ActionScript3 (есть возможность того, что для standalone я тоже буду писать на as3), с другой – я все еще верю в то, что все будет хорошо с технологией Adobe Flash. Пост, посвященный своим соображениям по поводу последних событий, и как я вижу дальнейшее развитие Adobe Flash, будет попозже, просто, во всем этом я запутался, и надо немного времени на разбор этой каши, а что касается этого поста, то тут все просто. Stage3D API это очень и очень низкоуровневое графическое API, здесь требуется следить за каждым этапом отрисовки, но если хотите что-то высокоуровневое – Proscenium отличный выбор, хотя уже сейчас есть несколько отличных решений-конкурентов, но я их еще не смотрел, поэтому могу сказать только за Proscenium. Вообще Stage3D API и все что с ним связано - это очень большой океан, и видимо это не последняя статья на тему знакомства со Stage3D API.
Ну, вот и все. Всем удачи. Пока.