PaperVision 3D Objecten
Objecten
Voordat ik naar primitives gaan, het is wel belangrijk dat we coordinaten begrijpen. Bij flash is het zo dat we vanuit linksboven x en y meten. Dus x=0 en y=0 is helemaal linksbovenhoek. En bij papervision is dat in het midden van scene3D met coordinaten van x=0, y=0 en z=0.
Nu we dat duidelijk hebben, ga ik verder met primitives. Primitives zijn standaard 3d modelen die al voorgemaakt zijn. Zoals cube, cilinder, cone, bal en plane. Omdat Plane het meest simpele primitive is, ga ik daarmee beginnen.
“Plane in PaperVision3D”
Plane is eigelijk geen 3d object omdat ie geen diepte heeft. Plane wordt meestal gebruikt bij bouwen van de muren of een vlake opervlaktes waar je heel makkelijk een interactie of een bitmap material kan toevoegen.
Laten we een starten met een voorbeeld
package{
import flash.display.Sprite;
import flash.events.Event;
import org.papervision3d.view.Viewport3D;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Plane;
import org.papervision3d.render.BasicRenderEngine;
public class PlanePV3D extends Sprite
{
private var viewport: Viewport3D;
private var scene: Scene3D;
private var camera: Camera3D;
private var material: ColorMaterial;
private var primitive: Plane;
private var renderer: BasicRenderEngine;
public function PlanePV3D():void
{
viewport = new Viewport3D(550, 400, false, true);
addChild(viewport);
scene = new Scene3D();
camera = new Camera3D();
renderer = new BasicRenderEngine();
material = new ColorMaterial(0x333333);
material.doubleSided = true;
primitive = new Plane(material, 200, 200, 3, 3);
scene.addChild(primitive);
addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
primitive.rotationY += 2;
renderer.renderScene(scene, camera, viewport);
}
}
}
Ok een simpele plane die gewoon in de midden geplaatst is.
Basis PaperVision3D
Om met papervision3d te beginnen ga ik duidelijk aangeven wat voor klassen zijn er en wat kun je ermee. Dan gaan we basis template bouwen die we altijd gebruiken bij het opzetten van pervision3D.
Ok als eerste beginnen we met Views.
“view”
View in Papervision3D kan het beste vergeleken worden met een raam. Een vlakte waardoor je kijkt. Deze view heeft x en y coordinaten(geen diepte z-axis), een breedte en hoogte.
Papervision heeft verschiellende views. Tot zo ver zijn er 3 views, waar elke van hun 3 eigen toepassing hebben.
“Viewport3D”
Viewport3D is render voor render engine. Deze zorgt voor interne centering en opruiming van onderdelen en om alles optimaal te houden.
private var ViewPort:Viewport3D = new Viewport3D;
“BitmapViewport3D”
BitmapViewport3D is een uitbreiding van Viewport3D waar alle onderdelen worden als bitmap beschouwd. De voordeel hiervan is dat elementen zeer snel gekopeerd kunnen worden waarbij bitmap effecten kunnen worden toegepast. (Meer hier over in latere tutorials).
private var ViewPort:BitmapViewport3D = new BitmapViewport3D();
“BasicView”
BasiView is gemaakt voor luie mensen waar je met minder codes een gehele 3d engine kan opstellen, want basisview omvat een camera, renderer, scene en viewport.
private var ViewPort:BasicView = new BasicView();
“Scene3D”
Scene3D is alles wat je door een raam (vlak) ziet: Gebouwen, straten, autos enz. Het is een lege 3D ruimte waar 3d objecten komen te staan.
private var scene:Scene3D = new Scene3D();
“Cameras”
Camera laat je zien wat zich bevindt in de scene door een view. Camera kun je verplaatsen met x y en z coordinaat om scene te bekijken.
Papervision bevat drie soorten camera’s: Camera3D, FreeCamera3D en FrustumCamera3D.
“Camera3D”
Camera3D kijkt altijd naar de target (object), ongeacht de positie ervan.
private var camera:Camera3D = new Camera3D(target);
“FreeCamera3D”
FreeCamera3D kijkt naar de omgeving waar de camera gericht is. Dus met deze camera kun je overal naar toe in de 3D ruimte. Deze camera ondersteund functies zoals yaw(), pitch() en roll() om kijkhoek van de camera aan te passen. Ook kun je met functies moveLeft(), moveRight(), moveUp(), moveFoward(),moveBackward(), moveUp() en moveDown() positie van de camera veranderen aan de hand van hoek waar deze zich onder bevindt. Ook door coordinaten x,y en z kan positie aangepast worden.
private var camera:FreeCamera3D = new FreeCamera3D();
“FrustumCamera3D”
FrustumCamera3D is het bijna hetzelfde zoals FreeCamera3D, alleen bij FrusumCamera3D kijk je binnen een bepaald gebied op 3D objecten.
private var camera:FrustumCamera3D =
new FrustumCamera3D(
viewport3D:viewport3D,
// Field Of view in degrees
fov:Number = 100;
//Distance to near plane
near:Number = 10,
//Distance to far plane
far:Number = 1000
};
“Render Engine”
“BasicRenderEngine”
Render Engine maakt de beeld in 3d zien. Het is een klass die maakt de beeld van scene vanaf de positie van camera door de viewport (raam).
private var render:BasicRenderEngine = new BasicRenderEngine();
render.renderScene(scene, camera, viewport);
Bij BasicRenderEngine kun je meerdere scenes, views of cameras gebruiken, waarbij je toch een BasicRenderEngine moet gebruiken om weer te geven.
“LazyRendeEngine”
LazyRenderEngine verwacht alleen een scene, camera en viewport om te renderen.
Hmm, we hebben een raam (view), alles wat we door raam zien (scene3d), camera waardoor we alles kunnen bekijken en render die view, scene en camera vertaaalt naar een 3d beeld.
Ok nu hebben we bijna alles gereed, alleen nog objecten in papervision3d en dat wordt volgende tutorial!



