Portal
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); } } }
Search
Recommended Books
Speaking at FITC Toronto
Recent Posts
- Moving to johnlindquist.com
- AsyncCommand with Robotlegs, Signals, Flight, MinimalComps
- Search Widget – Robotlegs, Signals, Flight, Minimal Comps, Yahoo Astra
- FDT Super Awesome March Deal
- haXe Tutorial
- AS3 Signals Tutorial
- Preferred Video Tutorial Resolution?
- TweenMax – Tweening a timeline (Advanced Tweening)
- Robotlegs + Flight + Union Platform
- Back in the saddle
- Eclipse Theme Designer Preview
- RobotLegs Hello World Video Tutorial
- 10 Things Every Senior Flash Developer Should Know
- Efflex – 3D Effects for Flex
- MorphController – Mighty Morphing Papervision3D
Recent Comments
- Xdragosy on Ribbons
- As on What is BasicView?
- Godie_dito on Dynamic Text on a Plane
- Angel Kaido on Following line
- bambii7 on faq
- Felipe on TweenMax – Tweening a timeline (Advanced Tweening)
- Ocatarinabelachichix on about
- Rajiv on faq
- Rajiv on 3ds max texture baking for Papervision3D
- Anupam Biswas on Maya Texture Baking
Categories
Archives
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


