Cube Inside Faces and Outside Faces
*updated to address comments
package { import flash.display.Bitmap; import flash.events.Event; import flash.events.MouseEvent; import org.papervision3d.core.proto.MaterialObject3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.shaders.CellShader; 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; import org.papervision3d.view.stats.StatsView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class InsideFacesOfACube 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; [Embed(source="assets/287.jpg")] private var environmentAsset:Class; private var light:PointLight3D; private var cube:Cube; private var materialsList:MaterialsList; private var sides:int = Cube.ALL; public function InsideFacesOfACube() { createMaterialsList(); cube = new Cube(materialsList, 500, 500, 500, 5, 5, 5, sides); scene.addChild(cube); startRendering(); stage.addEventListener(MouseEvent.CLICK, stage_clickHandler); } private function createMaterialsList():void { materialsList = new MaterialsList(); light = new PointLight3D(); materialsList.addMaterial(createShadedMaterial(backAsset), "back"); materialsList.addMaterial(createShadedMaterial(bottomAsset), "bottom"); materialsList.addMaterial(createShadedMaterial(frontAsset), "front"); materialsList.addMaterial(createShadedMaterial(leftAsset), "left"); materialsList.addMaterial(createShadedMaterial(rightAsset), "right"); materialsList.addMaterial(createShadedMaterial(topAsset), "top"); } private function createShadedMaterial(bitmapAsset:Class):MaterialObject3D { var bitmap:Bitmap = new bitmapAsset() as Bitmap; var bitmapMaterial:BitmapMaterial = new BitmapMaterial(bitmap.bitmapData, true); var shader:Shader = new CellShader(light, 0xffffff, 0xaaaaaa, 10); var shadedMaterial:ShadedMaterial = new ShadedMaterial(bitmapMaterial, shader); return shadedMaterial; } private function stage_clickHandler(event:MouseEvent):void { if(sides == Cube.ALL) { sides = Cube.NONE; } else { //you could also specify specific sides you want //i.e. - if you want every side but the front do: //sides = Cube.ALL - Cube.Front; //or if you only want the top and the bottom do: //sides = Cube.TOP + Cube.BOTTOM; sides = Cube.ALL; } scene.removeChild(cube); createMaterialsList(); var tempRotationX:Number = cube.rotationX; var tempRotationY:Number = cube.rotationY; cube = new Cube(materialsList, 500, 500, 500, 5, 5, 5, sides); cube.rotationX = tempRotationX; cube.rotationY = tempRotationY; scene.addChild(cube); } 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); } } }
7 Comments to Cube Inside Faces and Outside Faces
just curious, when you switch the views, it seems like the cube re-animates into the spot rather than just having the new other one appear where the current one sat. why does that happen? or are my eyes playing tricks on me?
when switch the cube many times, it appear that the processing go down… but you are removing it, what is going on?
oh, disregard my question above, i just realized after Andre’s comments that you’re removing/readding the cubes. i think it’d be a cooler effect if you just hid/unhid them so they animate the same way as i mentioned above
January 3, 2009
I updated the example to address both of your comments. You still need to recreate the cube to take advantage of the “sides” parameter, but you also need to recreate the materialsList to release all the references to the old cube.
nice, that looks much better.
wow, optical illusion really doesn’t work for me. i clicked the link expecting to see it as the outside of the cube and it looked very strange (because it was showing me the “inside”). had to close my eyes and imagine i was actually inside for it to work
March 26, 2009
Hello, I just started playing around with PV3D and it seems really cool and i have a little question about this example.
Is it possible to find out what side of the cube that have been pressed so you can specify different behavior on the different sides?
Thank you =)
Leave a comment
Search
Recent Posts
- MorphController - Mighty Morphing Papervision3D
- End dump
- Test if a plane is within the view of the camera (aka testing if culled)
- Materials Reference
- Perlin Blob
- Dynamic Text on a Plane
- Maya Texture Baking
- Creating a Custom VectorVision Font
- Workshop video and example dump
- 3D Math Book Recommendation
- Heading to New York. brb ;)
- Launching Flex4.org
- Flex 4 Layouts and Groups
- Flex 4 States
- How to click on stuff in Papervision3D - Viewport, ViewportLayers, InteractiveScene3DEvent, Mouse3D, and MovieMaterial Buttons
Recent Comments
- alexxcz on MorphController - Mighty Morphing Papervision3D
- andre venancio on 3D Math Book Recommendation
- DS on Dynamic Text on a Plane
- John Lindquist on Maya Texture Baking
- Itai on Maya Texture Baking
- Javier on End dump
- samBrown on End dump
- tf on archive
- Pan on requests
- Martin Lindelöf on requests


January 2, 2009