basics
ViewportLayer and sortMode “index” vs. “z”
If you need an object to ALWAYS be in front of other objects: put your objects in viewportLayers, give them a layerIndex, and set sortMode = ViewportLayerSortMode.INDEX_SORT:
package { import flash.events.Event; import flash.events.MouseEvent; import gs.TweenMax; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.objects.primitives.Sphere; import org.papervision3d.view.BasicView; import org.papervision3d.view.layer.ViewportLayer; import org.papervision3d.view.layer.util.ViewportLayerSortMode; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class ViewportLayersExample extends BasicView { private var headerText:headerContainer; private var redSphere:Sphere; private var greenPlane:Plane; public function ViewportLayersExample() { var infoText:headerContainer = new headerContainer(); infoText.header.text = "Click to toggle between sort modes \"z\" and \"index\""; addChild(infoText); headerText = new headerContainer(); headerText.y = 50; addChild(headerText); //placed at x:0, y:0, z:0 redSphere = new Sphere(new ColorMaterial(0xcc0000)); var sphereViewportLayer:ViewportLayer = new ViewportLayer(viewport, redSphere); viewport.containerSprite.addLayer(sphereViewportLayer); scene.addChild(redSphere); //placed at x:0, y:0, z:-500 greenPlane = new Plane(new ColorMaterial(0x00cc00)); var planeViewportLayer:ViewportLayer = new ViewportLayer(viewport, greenPlane); viewport.containerSprite.addLayer(planeViewportLayer); greenPlane.z = -500; scene.addChild(greenPlane); viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; sphereViewportLayer.layerIndex = 1; planeViewportLayer.layerIndex = 2; var floor:Plane = new Plane(new WireframeMaterial(0x00cc00), 3000, 3000, 20, 20); floor.y = -200; floor.pitch(90); scene.addChild(floor); TweenMax.to(greenPlane, 5, {z:500, yoyo:true}); addEventListener(Event.ENTER_FRAME, enterFrameHandler); viewport.containerSprite.buttonMode = true; viewport.containerSprite.addEventListener(MouseEvent.CLICK, clickHandler); } private function clickHandler(event:MouseEvent):void { viewport.containerSprite.sortMode = (viewport.containerSprite.sortMode == ViewportLayerSortMode.INDEX_SORT) ? ViewportLayerSortMode.Z_SORT : ViewportLayerSortMode.INDEX_SORT; } private function enterFrameHandler(event:Event):void { headerText.header.text = "sphere.z= " + String(redSphere.z) +" sort mode= " + viewport.containerSprite.sortMode + " plane.z= " + String(int(greenPlane.z)); singleRender(); } } }
Showing the hand cursor on a plane
Here’s some simple source to another question I see pop up often:
package { import org.papervision3d.events.InteractiveScene3DEvent; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.objects.primitives.Plane; import org.papervision3d.view.BasicView; [SWF(width="640", height="480", backgroundColor="#000000", frameRate="60")] public class HandCursorDemo extends BasicView { private var interactivePlane:Plane; private var nonInteractivePlane:Plane; public function HandCursorDemo() { //set the viewport interactive flag to true viewport.interactive = true; var interactiveMaterial:ColorMaterial = new ColorMaterial(0x00cc00); //set your material's interactive flag to true interactiveMaterial.interactive = true; var nonInteractiveMaterial:ColorMaterial = new ColorMaterial(0xcc0000); interactivePlane = new Plane(interactiveMaterial); interactivePlane.x = -500; nonInteractivePlane = new Plane(nonInteractiveMaterial); nonInteractivePlane.x = 500; //add listeners to the planes that have the interactive material interactivePlane.addEventListener(InteractiveScene3DEvent.OBJECT_OVER, objectOverHandler); interactivePlane.addEventListener(InteractiveScene3DEvent.OBJECT_OUT, objectOutHandler); scene.addChild(interactivePlane); scene.addChild(nonInteractivePlane); startRendering(); } private function objectOverHandler(event:InteractiveScene3DEvent):void { //change interactive plane's color to blue on roll over Plane(event.target).material.fillColor = 0x0000cc; //turn the hand cursor on viewport.buttonMode = true; } private function objectOutHandler(event:InteractiveScene3DEvent):void { //change interactive plane's color back to green on roll out Plane(event.target).material.fillColor = 0x00cc00; //turn the hand cursor off viewport.buttonMode = false; } } }
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
- FDT Theme Designer
- 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
Recent Comments
- شقق للبيع في الاردن on Moving to johnlindquist.com
- Annakhan006 on Augmented Reality – Recursive Webcam
- Yarout on Augmented Reality – Recursive Webcam
- Vivon on about
- Josh @ Wall Stickers on Moving to johnlindquist.com
- list of lpn courses on SpringCamera3D and Driving a Car
- rn to bsn in montgomery al on archive
- PowerPoint Recovery on Eclipse Theme Designer Preview
- cheat mw3 on Test if a plane is within the view of the camera (aka testing if culled)
- Goa Hotels on Looking around the inside of a Sphere
Categories
| M | T | W | T | F | S | S |
|---|---|---|---|---|---|---|
| « May | ||||||
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 | |||
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

