Papervision3D Grundlagen I Basics

Dezember 5th, 2009 by admin

Papervision3D Grundlagen: Papervision3D (in der Kurzform auch PV3D) ist eine Open Source 3D API, die es ermöglicht, dreidimensionale Inhalte mit Flash zu erstellen. Im folgenden Beispiel werden die ersten Grundlagen, also die absoluten Basics von PV3D erklährt. Das Ergebniss dieses Tutorials ist ein Pfeil der um X,Y und Z-Achse rotiert. Und so sieht er aus:

FlashPlayer starten

Den Code zu dem Beispiel entnehmt ihr hier:

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.Arrow
import org.papervision3d.render.BasicRenderEngine
 
public class PV3D extends Sprite 
{
	private var viewport: Viewport3D
	private var scene: Scene3D
	private var camera: Camera3D
	private var material: ColorMaterial
	private var primitive: Arrow
	private var renderer: BasicRenderEngine
 
	public function PV3D():void 
	{
		viewport = new Viewport3D(400, 250, false, true)
		addChild(viewport)
 
		scene = new Scene3D()
		camera = new Camera3D()
		renderer = new BasicRenderEngine()
		material = new ColorMaterial(0x990000)
		primitive = new Arrow(material)
		scene.addChild(primitive)
 
		addEventListener(Event.ENTER_FRAME, onEnterFrame)
	}
	private function onEnterFrame(e:Event):void 
	{
		primitive.rotationY += 2
		primitive.rotationX += 2
		primitive.rotationZ += 2
		renderer.renderScene(scene, camera, viewport)
	}
}
}

Papervision3D Grundlagen:
Neben dem eigentlichen Objekt und seiner Oberfläche gibt es vier grundlegende Elemente jeder Papervision3D-Anwendung. Hier eine Brücke zum Verständnis: Zunächst wäre da der Raum und als diesen könnt ihr euch die Instanz von Scene3D vostellen. Dann der Sichtbare Bereich, das Fenster zu diesem Raum, auf dem räumliche Inhalte abgebildet werden: das Viewport3D-Objekt. Das muss auf der Bühne liegen. Als nächstes der Betrachter oder die Kamera, deren Position über die Perspektive bestimmt, naheliegender weise das Camera3D Objekt. Und zu guter letzt muss jede 3D-Szene gerendert werden, das übernimmt das BasicRenderEngine-Objekt.

private var viewport: Viewport3D
private var scene: Scene3D
private var camera: Camera3D
private var material: ColorMaterial
private var primitive: Arrow
private var renderer: BasicRenderEngine

Als Textur wird hier eine simples Farbmaterial genutzt, natürlich gibt es die Möglichkeit Bitmaps und auch interaktive Inhalte zu nutzen. Doch für den Anfang sollte das reichen, weiter gehts mit dem eigentlichen Objekt (dem Pfeil), dass zu den primitiven Objekten von Papervision3D gehört und zur Initialisierung ein Material erfordert, also die rote Textur (das ist das ColorMaterial-Objekt). Anschließend wird der Preil noch der szene hinzugefügt:

material = new ColorMaterial(0x990000)
primitive = new Arrow(material)
scene.addChild(primitive)

Anmerkung Nutzt man statt eines Pfeils andere Modelle, ist es möglich zusätzlich anzugeben, aus wievielen Segmenten das jeweilige Objekt aufgebaut werden soll. Hierbei gilt grundlegend, je mehr Segmente dabei zum Einsatz kommen, desto detailierter die Form (gut vorstellbar mit Kugel-Objekten) und desto höher die erforderliche Rechenkapazität.

Gerendert werden muss, bei bewegten 3D-Inhalten, in jedem Frame, von daher bietet es sich an, einen Listener für ein EnterFrame Event zu registrieren. Um eine einfache Animation zu erzeugen, werden vor jedem Rendern die Rotationswerte des Pfeils auf allen Achsen verändert, was zu der Drehbewegung führt:

addEventListener(Event.ENTER_FRAME, onEnterFrame)
private function onEnterFrame(e:Event):void 
{
	primitive.rotationY += 2
	primitive.rotationX += 2
	primitive.rotationZ += 2
	renderer.renderScene(scene, camera, viewport)
}

Das wars auch schon, alles was bleibt, ist es viel Spaß beim Ausbau dieser einfachen PV3D Animation zu wünschen und natürlich bei den folgenden Grundlagen-Tutorials.

VizualPV3D

November 18th, 2009 by admin

Langsam sakt mein Unterkiefer gen Boden und mein Kopf bewegt sich ganz ohne easing auf den Bildschirm meines Laptops zu. Ob Limp Bizkit eine neue Platte rausgebracht hat? Liquid Crystal Display Kissing? Oder hat irgendwer tatsächlich eine IDE für PV3D entwickelt? Ja ja, ist das nicht geil?
Irgendwer ist kein geringerer als Gary Stasiuk von JUXT und VizualPV3D steht auf dessen website zum Download bereit. Dort kündigt man viele neue Features in den kommenden Monaten an, allerdings befindet sich Vizual gegenwärtig im alpha stadium und lässt damit den einen oder anderen Bug vermuten. Nichts desto trotz, für den Flash & 3D Themenkomplex ist das Projekt wegweisend und dürfte dessen Workflow massgeblich beeinflussen. Damit Entsteht für PV3D im rennen um die Flash3D Vorreiterrolle ein mächtiger Vorteil und Away3D, dass zwar technologisch und personaltechnisch vorn liegt, könnte das ganze deutlich zurückwerfen.
Und zu allem überfluss kommt bald ein neues LB Album in die Läden, wieviel gute Nachricht kann ich noch ertragen?

AS3 PreRenderer release steht kurz bevor

Oktober 8th, 2009 by admin

Innerhalb der nächsten Stunden wird die XClips API released. Einem XClip wird ein (aufwendig) Animiertes DisplayObject übergeben, aus dem dann der Bitmap-basierte XClip gerendert wird. Viele Filter, BlendModes oder etwa 3D-Szenen können auf diese weise in echtzeit zu einer Art Video zusammengestellt werden. Nach dem Rendern laufen Inhalte, an denen auch die neusten CPUs scheitern flüssig, schließlich handelt es sich nach dem Rendern nicht mehr um Vektor basierte Grafiken, die in echtzeit von Flash gerendert werden müssen.
Zu diesem Anlass habe ich einen kleinen Blog eingerichtet, den ich nach und nach mit Infos, Tuts, Experimenten und allem anderen rund um die Anwendung des XClip füllen werde. Links zu den XClips Docs und Download findet ihr ebenfalls unter xclips.opacki-flash.com. Oder folgt dem Link: XClips-Blog

Flash goes TV

August 1st, 2009 by admin

Wer sich noch immer fragt, welche Rolle die flv-Wiedergabe im HD-Format bei dem frischen Flashplayer Nummero 10 spielt, der sollte dringend mal bei building43 vorbeischauen. Denn was sich jetzt anbahnt, kann dem Wort “Plattformunabhängigkeit” bald eine ganz neue Dimension einverleiben – kurz gesagt: Flash goes TV.

Letzte Woche interviewte man Anup Murarka von Adobe Systems Flashsparte und die Neuigkeiten, die dieser zu verkünden hatte, lässt manches Entwicklerherz höher schlagen. Denn nach dem Handyboom der vergangenen Jahre will man bei Adobe jetzt das heimische Fernsehen erobern. Richtig gelesen, bald könnt Ihr Oma und Opa Pong für die Fernbedienung programmieren. Die Medien werden hier allerdings über spezielle Set-Top-Boxen aus dem Internet gestreamt, diese Geräte, ausgerüstet mit FP10 werden voraussichtlich nächstes Jahr in den Regalen stehen. Erste Anwendungsmöglichkeiten, werden auch gleich präsentiert – alles unter dem Titel “Flashy Future”. Adobe verfolgt also weiterhin eine konkrete Strategie bei der Verbreitung seiner Plattformunabhängigen RIAs, obwohl das I für Internet spätestens jetzt durch ein M wie Media abgelöst werden darf.

Viel Spaß mit dem Interview

Schatz, kannst du mich bitte zerstören, bevor ich gehe?

Juni 7th, 2009 by admin

Wenn Objekte zur Laufzeit erstellt und wieder entfernt werden sollen, kommt diese Methode zum Einsatz. Denn für Objekte, die eine begrenzte Lebenszeit zur Laufzeit der Applikation haben, ist es fast schon notwendig, eine destroy-funktion zu schreiben, die alle EventListener von dem Objekt entfernt. Natürlich ist das nur möglich, wenn es keine weiteren, von übergeordneten Objekten definierten Listener auf diesem Objekt gibt. In diesem Fall müsste das Übergeordnete Objekt die Destroy-Funktion besitzen.
Die Wichtigkeit dieser Vorgehensweise ergibt sich aus der Tatsache, dass der folgende code:

myObject = null

das Objekt nicht physikalisch aus dem Speicher entfernt, sondern lediglich den Verweis darauf über myObject löscht, solange es aktive EventListener für dieses Objekt gibt. Das wiederum führt zu unnötiger Speicherauslastung. Besonders Kritisch bei Flash-Spielen und Filmen in Endlosschleifen, wie Werbebannern. Mit der Kombination

myObject.destroyMe() //und...
myObject = null

wird der Speicher für das Objekt tatsächlich frei gegeben.