Papervision3D Grundlagen IV ShadeMaterials

Dezember 6th, 2009 by admin

Grundlagenwissen: Shading bezeichnet grundsätzlich den Vorgang, sowohl bei pv3d als auch bei jeder anderen 3D Egnine (unabhängig von Flash), bei dem die Textur eines Objektes zur Laufzeit manipuliert wird, um einen Effekt von Licht und Schatten auf dieser zu erzeugen. Beim Shading werden also Bereiche der Textur aufgehellt und abgedunkelt um stärkere Assoziationen zur Räumlichkeit herzustellen.

In Papervision3D gibt es verschiedene Shader und ShadeMaterials, wobei ShadeMaterials mit ColorMaterials vergleichbar sind, nur eben mit Shading inklusive. In diesem Fall dient das GouraudMaterial als texturelle Grundlage, welches ein ShadeMaterial ist. Falls das uninteressant klingt, im nächsten Teil werden “richtige” Texturen geshadet.

FlashPlayer starten

Zunächst der gesamte Code:

package{
import flash.display.MovieClip;
import flash.events.Event;
import org.papervision3d.materials.shadematerials.GouraudMaterial;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.view.BasicView;
import org.papervision3d.lights.PointLight3D;
 
public class ShadedCube extends BasicView 
{
	private var materialsList :MaterialsList;
	private var material: GouraudMaterial;
	private var primitive: Cube;
	private var lightPoint :PointLight3D
 
	public function ShadedCube()
	{
		super(500, 500, true);
 
		lightPoint = new PointLight3D(false);
		lightPoint.x = -50;
		lightPoint.y = -50;
		lightPoint.z = 50;
 
		material = new GouraudMaterial(lightPoint, 0xcc0000, 0x370000);
		materialsList = new MaterialsList( { all:material } );
 
		primitive = new Cube(materialsList, 500, 500, 500);
		scene.addChild(primitive);
 
		startRendering();
	}
 
	override protected function onRenderTick(e:Event = null):void {
		primitive.rotationY += 2
		primitive.rotationX += 2
		primitive.rotationZ += 2
		super.onRenderTick();
	}
}
}

Es benötigt eigentlich nur (im weitesten Sinne) ein Licht, das PointLight3D Objekt. Dieses kann über x, y und z im Raum positioniert werden. Anschließend wird das ShadeMaterial initialisiert, welchem die Hexcodes für die Farbe des Lichts sowie die Farbe der Umgebung übergeben werden. In diesem Fall ein heller und ein dunkler Rotton. Daraufhin wird das Material auf alle Seiten des Cubes angewendet, Voila.

lightPoint = new PointLight3D(false);
lightPoint.x = -50;
lightPoint.y = -50;
lightPoint.z = 50;
 
material = new GouraudMaterial(lightPoint, 0xcc0000, 0x370000);
materialsList = new MaterialsList( { all:material } );