Cube with different sides – MaterialsList

Saturday, December 20th, 2008 | examples


source

package
{
	import flash.display.Bitmap;
	import flash.events.Event;
 
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.BitmapMaterial;
	import org.papervision3d.materials.shaders.PhongShader;
	import org.papervision3d.materials.shaders.ShadedMaterial;
	import org.papervision3d.materials.shaders.Shader;
	import org.papervision3d.materials.utils.MaterialsList;
	import org.papervision3d.objects.primitives.Cube;
	import org.papervision3d.view.BasicView;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class CubeWithDifferentSides extends BasicView
	{
		[Embed(source="assets/back.jpg")]
		private var backAsset:Class;
 
		[Embed(source="assets/bottom.jpg")]
		private var bottomAsset:Class;
 
		[Embed(source="assets/front.jpg")]
		private var frontAsset:Class;
 
		[Embed(source="assets/left.jpg")]
		private var leftAsset:Class;
 
		[Embed(source="assets/right.jpg")]
		private var rightAsset:Class;
 
		[Embed(source="assets/top.jpg")]
		private var topAsset:Class;
 
		private var light:PointLight3D;
		private var cube:Cube;
 
		public function CubeWithDifferentSides()
		{
			var materialsList:MaterialsList = new MaterialsList();
 
			light = new PointLight3D();
 
			materialsList.addMaterial(createShadedMaterial( new backAsset() ), "back");
			materialsList.addMaterial(createShadedMaterial( new bottomAsset() ), "bottom");
			materialsList.addMaterial(createShadedMaterial( new frontAsset() ), "front");
			materialsList.addMaterial(createShadedMaterial( new leftAsset() ), "left");
			materialsList.addMaterial(createShadedMaterial( new rightAsset() ), "right");
			materialsList.addMaterial(createShadedMaterial( new topAsset() ), "top");
 
			cube = new Cube(materialsList, 500, 500, 500, 5, 5, 5);
			scene.addChild(cube);
 
			startRendering();
		}
 
		private function createShadedMaterial(bitmap:Bitmap):ShadedMaterial
		{
			var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData, true);
			var shader:Shader = new PhongShader(light, 0xffffff, 0x333333, 10, bitmap.bitmapData, bitmap.bitmapData);
			var shadedMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader);
			return shadedMaterial;
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			cube.rotationY += (viewport.containerSprite.mouseX - cube.rotationY) * .1;
			cube.rotationX += (viewport.containerSprite.mouseY - cube.rotationX) * .1;
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags: ,

  • Pete
    how to add zoom and make the materials clickable ?
  • steve
    trying this file out of the "box" ;) i get this error message:

    TypeError: Error #1007: Instantiation attempted on a non-constructor.
    at CubeWithDifferentSides$iinit()

    i'm looking through but i am a newbie to PV3D, si have no idea what it's in reference to.
  • When applying shaders to your cube is it possible to ad event listeners to them. I created a cube with movieclips for each side and had mouse events for each one. Once i applied the shader the mouse events stopped working. How do you add the shader but keep all the functionality that was once there?
blog comments powered by Disqus

Search

Recommended Books

Speaking at FITC Toronto

 

December 2008
M T W T F S S
« Nov   Jan »
1234567
891011121314
15161718192021
22232425262728
293031  

Preferred Video Tutorial Resolution

  • 1024x768 (53%, 85 Votes)
  • 1280x1024 (15%, 24 Votes)
  • 1920x1080 (15%, 24 Votes)
  • 800x600 (13%, 20 Votes)
  • 480x320 (4%, 6 Votes)
  • 640x480 (0%, 2 Votes)

Total Voters: 160

Loading ... Loading ...