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

Получилось...

Ну все, в первой (черновой) версии готово!!!

721 вершина, 481 полигон (треугольник) все изображается, крутится...
Ура!!!

Теперь остается еще прикрутить fps-счетчик (несколько минут) и заниматься оптимизацией...

Хотя нет, еще нужно добавить освещение.

пятница, 16 декабря 2011 г.

Особенности ActionScript и не только

Одной из особенностью ActionScript, на которую стоит обратить внимание - это такая же, как и в JavaScript, передача объектов по ссылке (by reference), то есть при создании двух объектов и присваивании одного другому, изменение свойств второго объекта повлечет за собой изменение свойств первого объекта. Функция клонирования из JS понадобится и в AS3.
Попробую сделать две версии: с использованием встроенных объектов пространства имен flash.geom (Matrix3D, Vector3D и т.д.) и грубых примитивов - аналогов.
Потом будут тесты, по итогам которых останется наиболее производительный вариант.


четверг, 15 декабря 2011 г.

Начало преобразования с JavaScript в ActionScript

Начало

Ну вот, началось...

public class Main extends Sprite {
        var sc:Scene;
        public function Main():void {
            if (stage)
                init();
            else
                addEventListener(Event.ADDED_TO_STAGE, init);
        }
        private function init(e:Event = null):void {
            removeEventListener(Event.ADDED_TO_STAGE, init);
            sc = new Scene();
            var req:URLRequest = new URLRequest("http://имя_домена/test/models/p.obj");
            req.method = URLRequestMethod.POST;
            var load:URLLoader = new URLLoader();
            load.addEventListener(Event.COMPLETE, completeHandler);
            try {
                load.load(req);
            } catch (err:Error){
                trace(err.message);
            }
        }
        private function completeHandler(event:Event):void {
            sc.loadOBJ(event.target.data);
        }
}


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

Классы UrlRequest и UrlLoader в AS3

Начало 

Для загрузки obj-файла извне необходимо совсем мало кода:

var req:URLRequest = new URLRequest("http://имя_домена/test/models/p.obj");
req.method = URLRequestMethod.POST;
var load:URLLoader = new URLLoader();
load.addEventListener(Event.COMPLETE, completeHandler);
try {
       load.load(req);
}catch (err:Error) {
       trace(err.message);
}



и:

private function completeHandler(event:Event):void {
       trace(event.target.data);
}

Перенос 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. 

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

Мысли о СИИ

Человек умеет составлять слова из букв, а из слов - фразы. Почему бы не научить программу составлять простой текст, а потом интерпретировать его. Для этого нужно придумать язык программирования. Эта аналогия возникает в связи с Машиной Тьюринга (МТ). Например, конечный автомат (КА) может проверять, соответствует ли слово (цепочка символов) определенному правилу (по составленной программе для КА). Автомат с магазинной памятью (АМП) решает спектр задач уже шире, и способен проверять правильность составления фразы (последовательности слов). МТ уже умеет не только проверять, но и изменять символы на ленте. К тому же есть универсальная машина Тьюринга, которая способна заменить собой любую машину Тьюринга. Нейронная сеть может решать задачу классификации (то есть выполнять функции КА).
Стоит подумать о гибриде НС и МТ.

вторник, 6 декабря 2011 г.

Идеи насчет СИИ

Есть несколько вариантов "восприятия" слов системами искусственного интеллекта:
1) Каждое слово представлять в виде выполняемой программы.
2) Разбор слова производить неким симбиозом машины Тьюринга и нейронной сети.
Пока это только мысли, попробую в дальнейшем воплотить их в реальность.
Еще есть идея насчет абстрактного устройства (наподобие автомата), которое может совершать переход из одного состояния в другое случайным образом из набора возможных вариантов, который в дальнейшем будет уменьшаться за счет отбрасывания неправильных вариантов.

Из истории создания 3D в Javascript

В интернете много опубликовано информации, есть даже исходники, для отображения трехмерных моделей в браузере без использования дополнительных плагинов вроде Microsoft Silverlight или Adobe Flash. В основном отображение осуществляется внутри контейнера canvas (одна из технологий HTML 5). Кое-где встречаются еще примеры работы с SVG и VML.

Казалось бы, что можно брать самую совершенную технологию и использовать ее, но что делать, когда у пользователей, которые будут просматривать странички с 3D содержимым, установлен только браузер по умолчанию, а это - Internet Explorer 6 или 7 (в лучшем случае) и нет возможности массово устанавливать новые версии браузеров вроде Mozilla Firefox или Google Chrome, плагин Adobe Flash Player? 
Ответ очевиден - использовать уже устаревшие технологии. SVG в Internet Explorer 6,7 не поддерживается, поэтому остается использовать VML.

Из известных примеров в интернете можно отметить (ни одного русскоязычного ресурса не встретилось, который бы затрагивал подобную тему):

http://www.garybeene.com/3d/3d-vml.htm - к сожалению, пример не удается загрузить (404 - Not found), а из тех частей кода, которые приведены в тексте невозможно восстановить текст целиком.
http://www.lutanho.net/svgvml3d/index.html - бесплатная библиотека, которая может быть использована для отображения и преобразования 3D объектов на html-страницах. Как видно из названия она поддерживает VML и SVG.
http://www.gersolutions.com/vml/ - еще одна из бесплатных библиотек 3D VML.