Away3D
Olemme aikaisemmin katsoneet hiukan Papervision3D moottoria, joka on hyvin suosittu, mutta ei suinkaan ainoa. Tällä kertaa halusin kokeilla Away3D moottoria.
Away3D on aikoinaan kehitetty sen aikaisen Papervisionin pohjalta, josta Away3D on alkanut mennä omaan suuntaansa ja Papervision3D omaansa.
Eli teemme flash ohjelman, joka lataa Teapotin ja pyörittää sitä ruudulla. So here goes.
package
{
import away3d.loaders.*;
import away3d.core.base.*;
import away3d.core.math.*;
import away3d.containers.*;
import flash.utils.getTimer;
import flash.display.Sprite;
import flash.events.Event;
/**
* ...
* @author Antti Veräjänkorva
*/
public class Main extends Sprite
{
private var m_view:View3D = new View3D( { x:400, y:300 } );
private var m_loader:Object3DLoader = Obj.load("../lib/teapot.obj");
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
addChild(m_view);
m_view.scene.addChild(m_loader);
m_view.camera.position = new Number3D(0,0, -2000);
addEventListener(Event.ENTER_FRAME, render);
}
private function render(e:Event = null):void
{
m_loader.handle.rotationY = getTimer() / 50;
m_view.render();
}
}
}
Varsin simppeliä, kuten aina näin alkuksi :). Selitän kuitenkin mitä rivit tekevät. Ihan selvyyden vuoksi.
Alkuun importataan muutama Away3D kirjasto, joita ohjelma tarvitsee. Näihin ei tarvitse liikaa kiinnittää huomiota tässä vaiheessa.
private var m_view:View3D = new View3D( { x:400, y:300 } );
Tämä rivi alustaa Away3D moottorin.
private var m_loader:Object3DLoader = Obj.load("../lib/teapot.obj");
Ladataan obj malli. Obj on luokka, joka lataa Obj malleja ja palauttaa ne Object3DLoader oliona.
addChild(m_view);
Away3D näyttää Flashille tavallisena DisplayObjectina, joten se lisätään Flash sceneen kuten muutkin DisplayObjectit.
m_view.scene.addChild(m_loader);
Lisätään ladattu malli Away3D sceneen.
m_view.camera.position = new Number3D(0,0, -2000);
Siirretään kamera -2000 yksikköä z-akselin negatiiviseen suuntaan.
m_loader.handle.rotationY = getTimer() / 50;
Pyöritetään mallia Y-akselin ympäri.
m_view.render();
Renderoidaan näkymä.
