среда, 14 декабря 2011 г.

Перенос 3D движка с Javascript на ActionScript

Решился на перенос кода. Несмотря на обилие готовых движков, наподобие Sandy, Away3D, Papervision3D и прочих. Не знаю, в чем причина, возможно, в излишнем объектно-ориентированном подходе. Многие библиотеки на ActionScript перегружены обилием различных классов на все случаи жизни. Например, использование центральной перспективной проекции считаю наиболее удачным способом отображения трехмерных объектов, причем предпочитаю строить проекцию не в точку с координатами (0,0,0), а в точку (0,0,с). В связи с этим предпочтением, реализация opengl'евского gluLookAt немного другая. Центр сцены переносится не в координаты позиции наблюдателя, а в координаты точки наблюдения (данная точка лежит по вектору направления взгляда на определенном расстоянии).
Поэтому приступим...
Используемые инструменты: FlashDevelop.
Платформы: FP 9.0, FP10.0 и FP11. (выбор таких платформ обоснован способом дальнейшего воспроизведения графики - методы moveTo, lineTo (FP9), drawPath и drawTriangles (FP10). Ну и конечно аппаратная поддержка графики в FP11
Понравилось высказывание от Adobe:
For developers wishing to leverage their ActionScript skills, choose one of the 2D or 3D frameworks below. 


Компоненто-ориентированный стиль все прочнее входит в нашу жизнь... Берешь уже готовое и используешь, а ковыряться в низко-уровненном языке - это уже не программист, а нечто страшное... Порой чувствуешь себя каким-то вымирающим видом... Конечно, нет стремления написать ОС целиком с нуля, как говорится, для каждого применения - свой язык и стиль, наиболее подходящий. Например, нравится язык C#, да, именно сам язык. Иногда понимаю почему в Европе используют Java, несмотря на некоторые недостатки JVM. Ну и что, что долго выполняется, зато он ОО в лучшем виде.
И еще полюбил стиль K&R в написании кода, не знаю почему, но он мне нравится, все редакторы настраиваю на него.
Ну и первый пример:
package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    public class Main extends Sprite {
        public function Main():void {
            if (stage) init();
            else addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(e:Event = null):void {
            var g:Graphics;
            removeEventListener(Event.ADDED_TO_STAGE, init);
            g = this.graphics;
            g.beginFill(0xff0000);
            g.moveTo(0, 0);
            g.lineTo(100, 0);
            g.lineTo(100, 100);
            g.endFill();
        }
    }
}
Это самый простой пример с графикой на AS3. Следующим будет пример загрузки obj-файла.

P.S. Как будет свободное время желательно посмотреть, почему в блоге нет возможности вставлять код с подсветкой синтаксиса. Удобная вещь - нажал на кнопку code и текст программы выделился от всего остального...

Продолжение 

Комментариев нет:

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