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

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

Всем привет. Вон на этих выходных я захотел познакомиться с новым Stage3D API, ведь куда уже тянуть, Adobe Flash Player 11 уже как полмесяца назад вышел, а я так и не попробовал его в действии. Скажу сразу, я думал, что все будет совсем не так на текущий момент. Я думал, что уже есть куча туториалов, примеров и «Хелло Ворлдов», но на самом деле практически ничего нет. На Adobe Developer Connection все еще нет нормального туториала. Есть три отличных статьи, но они скорее рассказывают как работает Stage3D, тоесть одна теория, практики все еще нет. Но судя по содержанию документации, очень скоро должны появиться отличные статьи:
Как я понял, эти статьи пишет «ковбой» Marco Scabia, на текущий момент все его три статьи написаны на отлично, но как я уже говорил, там одна теория, практики мало, ну почему-же он не выкладывает исходники примеров из статей? Во всяком случае, желаю ему удачи в этом не легком деле.
Так же на Adobe Developer Connection я увидел интересную ссылку на книгу, называется она Adobe Flash 11 Stage3D (Molehill) Game Programming Beginner’s Guide. Как я понял, эта книга все еще в процессе написания, но судя по описанию в профиле, она вот-вот выйдет. Интересно то, что книга продается в электронном виде, и стоит  куда меньше чем бумажное издание. Конечно, получить подобную литературу мне очень хочется, сейчас подумываю над приобретением этой книги.
Вот вся информация о Stage3D API, которую я нашел, это очень печально, видимо я очень плохо умею пользоваться гуглом. Но, из этой ситуации я все-же выкарабкался, я вспомнил про блог bytearray.org и про старенькую статью Digging more into the Molehill APIs. Так же я решил узнать в фейсбуковской группе RuFlash не знает ли кто-то хороших статей по Stage3D API, и как не странно мне помогли, местные комрады дали ссылку на довольно таки интересный ресурс iFlash3D, и на статью My Name is AGAL, and I Come from Adobe – Part2. В итоге имея всю эту информацию, я решил написать свой «Hello World» для Stage3D API, и далее некий список моих «Hello World» из четырех элементов, для просмотра требуется Adobe Flash Player 11, просто щелкните на изображение.
Используя статью с ByteArray и iFlash3D, я написал простое приложение, в котором отображается затекстурированный прямоугольник, состоящий из двух треугольников. Все просто и не замысловато. Писать было не очень удобно, код писался в Flash Develop 4 beta, но отлаживался в браузере FireFox 3.х в Debug версии Adobe Flash Player 11. Standalone версию Adobe Flash Player 11 Debug я так и не нашел. Печально, но привыкнуть можно, хоть поначалу не очень удобно. В целом, первый опыт с Stage3D API дал мне понять что да как, и как все это работает на самом деле. Позже я еще напишу об этом подробнее, но сейчас я понял то, что есть несколько главных  вещей: Stage3D – сама сцена, Context3D – контекст для рисования 3D-объектов, VertexBuffer3D – набор вершин геометрии и их различных свойств в 3D-пространстве, IndexBuffer3D – набор индексов вершин, VertexShader – программа для GPU, которая обрабатывает точки, FragmentShader – программа для GPU, которая строит изображение полигонов, Program3D –программа включающая в себя VertexShader и FragmentShader.
На текущий момент я знаю мало о Stage3D API, но все-же желания узнать его поближе есть, и еще какое. Вот поэтому я решил поэкспериментировать с VertexBuffer3D и IndexBuffer3D. Я решил вывести всего один треугольник с текстурой, для этого пришлось немного изменить набор данных VertexBuffer3D и IndexBuffer3D, но, во всяком случае, я понял зачем именно нужны эти два объекта. Результат моего эксперимента видны в примере ниже:
Все-таки некоторые вопросы по этим двум классам есть, но в скором времени они решатся, просто в первый день не все может залезть в голову. Также я еще решил поэкспериментировать с фрагментным шейдером, в частности  разукрасить треугольник различными цветами. Что получилось видно в демке:
Шейдеры это интересно, даже очень. Удручает только то, что приходить писать на очень и очень низкоуровневом языке шейдеров AGAL, но я уже видел несколько решений, и возможно в следующей части я расскажу и о них тоже. Ну, а в конце, для закрепления знаний, я решил обратно превратить треугольник в прямоугольник, и опять же разукрасить его в фрагментном шейдере:
Вот так и закончились мои выходные. Мне очень понравилось. До этого не имел ни с чем  подобного дела, все ново и загадочно. Вопросы есть, но как я понял главный ответ на них – 3D графика. Потихоньку надо переходить на новый API. Да, знакомство с Stage3D API прошло на славу, но не все элементы я еще разобрал, вот поэтому статья и разделена на несколько частей. Сейчас у меня в планах познакомится полностью с Stage3D API, разобрать по полочкам все его главные элементы. Позже возможно буду переводить статейки, ведь нормальной русскоязычной литературы по Stage3D API я еще не встречал. Кстати, если встречали, киньте ссылку в коменты, очень надо. Кидайте не только русскоязычные статейки, любые статейки подойдут, просто я очень хреновый искатель информации в гугле...
Ну, вот и все. Всем удачи. Пока.