Ir para o conteúdo

Hello World Alternativa3D & FlashDevelop

Como me estou a iniciar na Plataforma Flash Alternativa 3D e no seguimento de um tutorial de como executar a plataforma Alternativa3D e um dos seus demos no FlashDevelop, vamos iniciar a programação na Alternatviva3D, criando objectos nós mesmos.

Imports

Primeiro, vamos ter de importar as classes da framework no nosso ficheiro Main.as. Ou seja, o aspecto da parte inicial do ficheiro, mesmo a seguir ao package{, temos algo como isto:

import alternativa.engine3d.controllers.CameraController;
import alternativa.engine3d.core.Camera3D;
import alternativa.engine3d.core.Object3D;
import alternativa.engine3d.core.Scene3D;
import alternativa.engine3d.display.View;
import alternativa.engine3d.materials.WireMaterial;
import alternativa.engine3d.primitives.Box;
import alternativa.utils.FPS;
import flash.display.Sprite;
import flash.display.StageAlign;
import flash.display.StageScaleMode;
import flash.events.Event;

Depois, vamos definir uma cor para o fundo:

[SWF(backgroundColor="#000000", frameRate="100")]

Variáveis

Vamos declarar as variáveis necessárias.

private var scene:Scene3D;
private var view:View;
private var camera:Camera3D;
private var cameraController:CameraController;
private var box:Box;

Feito isto, vamos programar.

Function Main()

Temos apenas de adicionar uma linha de código:

addEventListener(Event.ADDED_TO_STAGE, init);

Function init(e:Event): void

Vamos adicionar a seguinte linha de código para que a função init() seja chamada apenas uma vez.

removeEventListener(Event.ADDED_TO_STAGE, init);

De seguida, vamos criar a cena.

scene = new Scene3D();
scene.root = new Object3D();

Iniciada a cena, vamos adicionar-lhe um objecto. Neste caso um cubo.

box = new Box(100, 100, 100, 3, 3, 3);
box.cloneMaterialToAllSurfaces(new WireMaterial(1, 0xFFFFFF));
scene.root.addChild(box);

Para conseguirmos fazer surtir algum efeito de todas as linhas de código anteriores, temos de adicionar uma câmara e uma visualização.

camera = new Camera3D();
camera.x = 100;
camera.y = -150;
camera.z = 100;
scene.root.addChild(camera);
view = new View(); 
addChild(view); 
view.camera = camera;

Agora vamos ter de adicionar um controlador para a câmara.

cameraController = new CameraController(stage);
cameraController.camera = camera;
cameraController.setDefaultBindings();
cameraController.checkCollisions = true;
cameraController.collisionRadius = 20;
cameraController.lookAt(box.coords);
cameraController.controlsEnabled = true;

E temos os últimos preparativos.

FPS.init(stage);

Function onResize(e:Event):void

Adicionamos-lhe este código, para que a área de visualização da cena 3D se redimensione sempre que o objecto Flash se redimensione:

view.width = stage.stageWidth;
view.height = stage.stageHeight;

Function onEnterFrame(e:Event):void

cameraController.processInput();
scene.calculate();

Conclusão

Iremos ter um resultado como este.

Preview