Alternativa3D. Урок 1.
Дорогие читатели, страждующие трехмерного просвещения, здравствуйте! Сейчас мы с вами узнаем основы работы с трехмерным движком Alternativa3D. В этом уроке будем создавать простую сцену, на которой будет находиться вращающаяся плоскость. При щелчке мыши на плоскости, она будет менять свой угол вращения.Ну что? Поехали?
Для работы нам понадобится FlashDevelop (ну и что там с ним связано). Так же понадобится Flash IDE (во всяком случае я компилил при помощи флеша).
Устанавливаем FlashDevelop и настраиваем. Я указывал путь до Flash IDE. Для этого идем в Tools->Program Settings->ASCompletion. Находим Path to Flash IDE и прописываем путь:

Теперь создаем проект во FlashDevelop. Для этого идем в Project->New Project, в открывшемся окне выбираем AS3 Project, указываем место сохранения и задаем имя:

Поздравляю, вы на пути к истине! Справа, в дереве проекта, выбираем папку src, в ней находим файл Main.as. Он содержит примерно следующий код:
package
{
import flash.display.Sprite;
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
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
}
}
}
Единственное, что сейчас стоит сделать — это изменить
package{
…
}наpackage src {
…
}
Теперь идем на сайт Alternativa3D и качаем дистрибутивы. В дистрибутивах нас интересует на данный момент только библиотека swc. Ее мы распаковываем в папку с проектом и кладем в папку lib. Во FlashDevelop в дереве проекта жмем на ней правой кнопкой и выбираем Add To Library:

Далее открываем Flash IDE и создаем проект ActionScript 3.0:

Вначале сохраняем файл в папку с проектом, созданным во FlashDevelop. Теперь идем в свойства флешки. В поле Class вводим src.Main:

Далее жмакаем на кнопку Edit… напротив Profile . В открывшемся окне на вкладке Flash жмем на кнопку Settings…:

В открывшемся окне выбираем вкладку Library path, жмем на красную кнопку и указываем, где лежит наша swc:

На этом наши подготовления закончены и начинается веселье. Открываем файл src/Main.as и меняем существующий код на следующий код (не отлыниваем и вводим ручками, вдумываясь в каждое слово, в каждую буковку и закорючечку):
package src
{
import flash.display.Sprite;
import flash.events.Event;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.MouseEvent3D;
import alternativa.engine3d.core.Object3DContainer;
import alternativa.engine3d.core.View;
import alternativa.engine3d.materials.FillMaterial;
import alternativa.engine3d.primitives.Plane;
public class Main extends Sprite
{
//Контейнер - это сцена на которой находятся трехмерные объекты
private var container:Object3DContainer = new Object3DContainer();
//Камера - это камера
private var camera:Camera3D = new Camera3D();
//Без слов
private var plane:Plane;
//Скорость вращения плоскости
private var rotationSpeed:Number = 0.01;
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);
// entry point
initAlternativa3D();
}
private function initAlternativa3D():void
{
//Камера производит отображение трехмерного мира
//на двухмерную плоскость. Вот эта плоскость и есть View.
//View еще по-другому называют вьюпорт. View является DisplayObject.
camera.view = new View(stage.stageWidth, stage.stageHeight);
addChild(camera.view);
//camera.diagram - содержит отладочную информацию
addChild(camera.diagram);
//Устанавливаем позиции нашей камеры
camera.rotationX = -120 * Math.PI / 180;
camera.y = -800;
camera.z = 400;
//Добавляем камеру в контейнер
//Камера при рендеринге будет перерисовывать
//все объекты находящиеся с ней в одном контейнере
container.addChild(camera);
//Создание плоскости
plane = new Plane(500, 500);
plane.rotationX = 90 * Math.PI / 180;
//Добавляем событие при щелчке левой кнопкой мыши на плоскости
plane.addEventListener(MouseEvent3D.CLICK, onPlaneClick);
//При наведении на плоскость курсор будет меняться на руку
plane.useHandCursor = true;
//Создаем материал. Материал - это что-то наподобии текстуры.
//В нашем случае мы создаем FillMaterial.
//При создании FillMaterial указываем цвет материала,
//прозрачность, толщину линий обводки полигона и цвет линий.
var material:FillMaterial = new FillMaterial(0xECF936, 1, 1, 0x000000);
//Задаем для плоскости материал.
plane.setMaterialToAllFaces(material);
//Добавляем в контейнер плоскость.
//Теперь она будет отрисовываться во вьюпорт.
container.addChild(plane);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onPlaneClick(e:MouseEvent3D):void
{
//При клике мыши на плоскости мы меняем
//скорость вращения на противоположную
rotationSpeed *= -1;
}
private function onEnterFrame(e:Event):void
{
// Вращение примитива
plane.rotationZ += rotationSpeed;
// Перерисовка содержимого container в camera.view
camera.render();
}
}
}
Ввели? Не копировали? Ну молодцы. Теперь жмакаем F6 и радуемся своей необузданной крутости.

UPDATE: исходники можно скачать тут.
- +6
- kiloT

Комментарии (25)
А так — плюсищее — оч ждал. но до выхода молхила пробывать не буду:)
А попробывать стоит ;) времени не много займет, а +1 к интеллекту прибудет ))))) Если кому надо, могу исходники кинуть на мыло…
Если бы вы создавали во FlashDevelop проект как Flash IDE Project — то да понадобилась бы настройка пути к флешу и запуск на исполнение во FlashDevelop запускал бы проект во флеше.
Кстати создавал во FlashDevelop FlashIDE Project и он был пустым. Не стал заморачиваться дальше.
FlashDevelop может и так запускать во FlashIDE проект через F6.
Вы 2 раза делаете одну и ту же работу по настройке проектов. Уже обсуждали в блоге о разделении графики и кода.
FlashIDE Project — an empty project writen in ActionScript 3 with compiliation using the Flash IDE
AS3 Project — a project writen in ActionScript 3for the flash 9/10 player
Вы создали именно AS3 Project который работает без Flash IDE, в то же время настроили и Flash IDE :)
Мелочи конечно.
И кстати, уроки на какой версии Альтернативы планируется делать? В самой свежей версии например класс Geometry убрали и еще многое поменяли.
Я хз — мне нравится и жду продолжения.