`

Papervision3d QuadTree四叉树相机的示例

阅读更多
http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
在Papervision3d,新加入的QuadTree(四叉树)渲染方法,很好的解决了Papervision3d中交叉面的显示问题,面少的时候,效率还行。
“QuadrantRenderEngine确实解决了破面现象,但效率实在不敢恭维,特别是面多的时候(如人物)”
下面是一个实际的例子。
单击一下画面,我们就可以在Papervision3d BasicRenderEngine(默认的渲染驱动)与QuadrantRenderEngine(四叉树渲染驱动)之间切换。

代码如下,贴图您可以用自己的贴图。
package
{
	import flash.display.*;
	import flash.events.*;
	import flash.utils.*;
	
	import org.papervision3d.cameras.*;
	import org.papervision3d.materials.*;
	import org.papervision3d.materials.special.*;
	import org.papervision3d.materials.utils.*;
	import org.papervision3d.objects.*;
	import org.papervision3d.objects.primitives.*;
	import org.papervision3d.render.*;
	import org.papervision3d.view.*;

	[SWF(width="640", height="480", backgroundColor = "0x000000", frameRate = "60")]
	
	public class QuadTreeExe01 extends BasicView
	{
		private var plane :DisplayObject3D;
		private var cube  :DisplayObject3D;
		
		[Embed(source = "assets/bvu.jpg")] private var BitmapClass:Class;
		
		public function QuadTreeExe01()
		{
			super(0, 0, true, false, CameraType.TARGET);
			
			cube = new Cube(new MaterialsList( { all:new BitmapMaterial(new BitmapClass().bitmapData, true) } ));
			cube.x = 400;
			
			var planeMaterial:CompositeMaterial = new CompositeMaterial();
			planeMaterial.addMaterial(new ColorMaterial(0xFFFFFF, .5));
			planeMaterial.addMaterial(new WireframeMaterial(0xFFFFFF));
			
			plane = new Plane(planeMaterial, 1500, 1500);
			plane.material.doubleSided = true;
			plane.material.tiled = true;
			
			plane.pitch(90);
			
			scene.addChild(plane);
			scene.addChild(cube);
			
			renderer = new QuadrantRenderEngine(QuadrantRenderEngine.ALL_FILTERS);
			
			startRendering()
			
			stage.addEventListener(MouseEvent.CLICK, clickHandler);
			
		}
		
		private function clickHandler(e:MouseEvent):void 
		{
			if(renderer is QuadrantRenderEngine)
				renderer = new BasicRenderEngine();
			else
				renderer = new QuadrantRenderEngine(QuadrantRenderEngine.ALL_FILTERS);
		}
		
		protected override function onRenderTick(e:Event = null):void
		{
			cube.y = Math.sin(getTimer() / 400) * 400;
			cube.x = Math.cos(getTimer() / 400) * 100;
			cube.roll(1);
		
			// rotate by mouse interactive
			camera.x += (Math.sin(mouseX / stage.stageWidth * 3 * Math.PI) * 1200 - camera.x) * .1;
			camera.z += (Math.cos(mouseX / stage.stageWidth * 3 * Math.PI) * 1200 - camera.z) * .1;
			camera.y += (mouseY / stage.stageHeight * 2000 - 500 - camera.y) * .05;
			
			super.onRenderTick(e)
		}
	}
}

http://www.newflash3d.com---flash3D先锋队:北京贝武易科技公司】
有疑问请联系我QQ:363596350
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics