Portal

Tuesday, December 9th, 2008 | examples, requests


source

package
{
	import flash.display.Bitmap;
	import flash.display.BitmapData;
	import flash.events.Event;
	import flash.events.KeyboardEvent;
	import flash.ui.Keyboard;
 
	import org.papervision3d.core.proto.MaterialObject3D;
	import org.papervision3d.lights.PointLight3D;
	import org.papervision3d.materials.ColorMaterial;
	import org.papervision3d.materials.WireframeMaterial;
	import org.papervision3d.materials.shadematerials.FlatShadeMaterial;
	import org.papervision3d.objects.primitives.Plane;
	import org.papervision3d.objects.primitives.Sphere;
	import org.papervision3d.scenes.Scene3D;
	import org.papervision3d.view.BasicView;
	import org.papervision3d.view.Viewport3D;
	import org.papervision3d.view.layer.ViewportLayer;
	import org.papervision3d.view.layer.util.ViewportLayerSortMode;
 
	[SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")]
	public class Portal extends BasicView
	{
		private var portalViewport:Viewport3D = new Viewport3D();
		private var portalScene:Scene3D = new Scene3D();
		private var portalPlane:Plane;
 
		private var exposedViewport:Viewport3D = new Viewport3D();
		private var exposedScene:Scene3D = new Scene3D();
 
		private var mainSphere:Sphere;
		private var exposedSphere:Sphere;
 
		public function Portal()
		{
			addChild(exposedViewport);
			addChild(portalViewport);
 
			setupExposedViewport();
			setupPortalViewport();
			setupMainViewport();
 
			startRendering(); 	
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
		}
 
		private function setupExposedViewport():void
		{
			var bitmapData:BitmapData = new BitmapData(640, 480, false, 0xffffff);
			var bitmap:Bitmap = new Bitmap(bitmapData);
			bitmap.x = -320;
			bitmap.y = -240;
 
			var viewportLayer:ViewportLayer = new ViewportLayer(exposedViewport, null);
			viewportLayer.addChild(bitmap);
			exposedViewport.containerSprite.addLayer(viewportLayer);
 
			var light:PointLight3D = new PointLight3D();
			var flatShadeMaterial:FlatShadeMaterial = new FlatShadeMaterial(light, 0xcc0000, 0x2b2b2b, 10);
			exposedSphere = createSpheres(flatShadeMaterial);
 
			var viewportLayer2:ViewportLayer = new ViewportLayer(exposedViewport, exposedSphere);
			for each(var sphere:Sphere in exposedSphere.children)
			{
				viewportLayer2.addDisplayObject3D(sphere);
			}
			exposedViewport.containerSprite.addLayer(viewportLayer2);
 
			viewportLayer.layerIndex = 1;
			viewportLayer2.layerIndex = 2;
			exposedViewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT;
 
			exposedScene.addChild(exposedSphere);
 
			exposedViewport.containerSprite.mask = portalViewport;
		}
 
		private function setupPortalViewport():void
		{
			var whiteMaterial:ColorMaterial = new ColorMaterial(0xffffff);
			portalPlane = new Plane(whiteMaterial);
			portalPlane.z = -500;
			portalScene.addChild(portalPlane);
		}
 
		private function setupMainViewport():void
		{
			var wireframeMaterial:WireframeMaterial = new WireframeMaterial(0xffffff);
			mainSphere = createSpheres(wireframeMaterial);
 
			scene.addChild(mainSphere);
		}
 
		private function keyDownHandler(event:KeyboardEvent):void
		{
			switch(event.keyCode)
			{
				case Keyboard.UP:
					camera.moveForward(10);
					break;
 
				case Keyboard.DOWN:
					camera.moveBackward(10);
					break;	
			}
		}
 
		private function createSpheres(material:MaterialObject3D):Sphere
		{
			var parentSphere:Sphere = new Sphere(material);
 
			var child1:Sphere = new Sphere(material);
			child1.x = -500;
			var child2:Sphere = new Sphere(material);
			child2.x = 500;
			var child3:Sphere = new Sphere(material);
			child3.y = 500;
			var child4:Sphere = new Sphere(material);
			child4.y = -500;
 
			parentSphere.addChild(child1);
			parentSphere.addChild(child2);
			parentSphere.addChild(child3);
			parentSphere.addChild(child4);
 
			return parentSphere;
		}
 
		override protected function onRenderTick(event:Event=null):void
		{
			mainSphere.rotationY++;
			exposedSphere.rotationY++;
 
			portalPlane.moveForward(500);
			portalPlane.rotationY = -viewport.containerSprite.mouseX / 320 * 90;
			portalPlane.moveBackward(500);
 
 
			renderer.renderScene(portalScene, camera, portalViewport);
			renderer.renderScene(exposedScene, camera, exposedViewport);
			renderer.renderScene(scene, camera, viewport);
		}
	}
}

Tags:

blog comments powered by Disqus

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 ...

Search

Recommended Books

 

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