basics

ViewportLayer and sortMode “index” vs. “z”

Thursday, November 20th, 2008 | examples | Comments

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: , ,

Showing the hand cursor on a plane

Tuesday, November 18th, 2008 | examples | Comments

Here’s some simple source to another question I see pop up often:

View example
source

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

Tags: , ,

Search

Recommended Books

Speaking at FITC Toronto

 

May 2012
M T W T F S S
« May    
 123456
78910111213
14151617181920
21222324252627
28293031  

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