Papervision3D Grundlagen II BasicView

Dezember 6th, 2009 by admin

Vorhergehendes Beispiel lässt sich auch schneller und einfacher realisieren. Wenn man die Grundlagen von Papervision (Viewport, Scene, Camera, Renderer, Objekt und Material) versteht, erhält man mit dem Basicview ein praktisches Template für einfache 3D Scenes. Das setzt natürlich voraus, dass die gesamte Szene in einem Viewport dargestellt und gerendert wird. In einem solchen Fall ist das Ergebniss ist das Gleiche:

FlashPlayer starten

Doch die Arbeit dahinter wird minimiert:

package{
import flash.events.Event;
import org.papervision3d.materials.ColorMaterial;
import org.papervision3d.objects.primitives.Arrow;
import org.papervision3d.view.BasicView;
 
public class BasicViewArrow extends BasicView 
{
	private var material: ColorMaterial;
	private var primitive: Arrow;
 
	public function BasicViewArrow()
	{
		super(500, 500, true);
		material = new ColorMaterial(0x000099);
		primitive = new Arrow(material);
		scene.addChild(primitive);
 
		startRendering();
	}
 
	override protected function onRenderTick(e:Event = null):void {
		primitive.rotationY += 2;
		primitive.rotationX += 2;
		primitive.rotationZ += 2;
		super.onRenderTick();
	}
}
}

Die Klasse erbt von org.papervision3d.view.BasicView. Der BasicView selbst erbt (um eine Ecke) vom Sprite und hält bereits einen ein Camera3D-, Scene3D-, ViewPort3D, und ein BasicRenderer Objekt für seine Nachkommen bereit.

Ausserdem ist hier der EnterFrame Listener überflüssig geworden, da auch diese Funktion vom BasicView bereitgestellt wird. Sie heißt startRendering, um das Rendern zu stoppen genügt ein Aufruf von stopRender und mit singleRender wird ein einzelnes Bild ausgerendert. Die Funktion startRendering tut im Grunde genau das, was im ersten Tutorial von unserem EventHandler erledigt wurde, indem es in jedem Frame onRenderTick aufruft. Also habe ich in diesem Fall die Funktion onRenderTick überschrieben um die Rotation zu erzeugen.

override protected function onRenderTick(e:Event = null):void {
		primitive.rotationY += 2
		primitive.rotationX += 2
		primitive.rotationZ += 2
		super.onRenderTick();
	}

Aus funktioneller Sicht wurde das vorhergehende Beispiel also nicht verändert, doch es ist jetzt viel weniger Code notwendig, um das selbe Ergebniss zu erreichen. Weiter gehts bei den Grundlagen von Papervision mit animierten Materials, siehe Papervision Grundlagen Teil 3.