ViewportLayer and sortMode “index” vs. “z”

Thursday, November 20th, 2008 | examples

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:

View example
source

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();
		}
	}
}

Tags: , ,

  • Joe
    well, I would of thought of the viewport layer something like a HUD but it is not. It is really weird to have this layer as from the name it means that objects belong to the viewport but in reality they do not. I am still tryign to find a better way to create HUDs in papervision (I do not mean 2D Display object huds) but also 3D huds.
blog comments powered by Disqus

Search

Recommended Books

Speaking at FITC Toronto

Recent Comments

 

November 2008
M T W T F S S
    Dec »
 12
3456789
10111213141516
17181920212223
24252627282930

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