PV3D和Away3D性能比较

由于项目要用到Flash开发3D动画,于是想起了曾经不知在何处看到了几个Flash流行3D类库,经过一番挑选找到PV3D和Away3D,都说PV3D性能高但不灵活,Away3D灵活但性能不高。性能的确是个很重要的考虑因素,二者性能究竟差多少,网上没有现成的答案,于是自己动手,丰衣足食。费了一番周折,运行成功PV3D和Away3D的例子,然后开始测试:

测试内容:显示旋转球体,球体表面分20000个三角形,半径都设为200,不要光照。

     flash尺寸为800*600,fps:30,质量LOW。

PV3D实测值:15.6 fps

Away3D实测值:4.23 fps

虽然二者的性能都只能用不堪入目来形容,不过考虑到也不是用flash开发3D游戏,PV3D那个15fps也是能忍的。

Away3D源代码

package 
{
	import away3d.cameras.*;
	import away3d.containers.*;
	import away3d.core.utils.*;
	import away3d.lights.*;
	import away3d.materials.*;
	import away3d.primitives.*;
	
	import flash.display.*;
	import flash.events.*;
	import flash.geom.*;
		
	[SWF(backgroundColor="#000000", frameRate="30", quality="LOW", width="800", height="600")]
	
	public class GE extends Sprite
	{
		//texture for globe
		[Embed(source="test.png")]
    	        public static var EarthImage:Class;
	

		private var scene:Scene3D;
		private var camera:Camera3D;
		private var view:View3D;
		private var t:Date;
		private var total:int;
		
		private var material:PhongBitmapMaterial;
		
		//scene objects
		private var sphere:Sphere;
		
		private var spherecontainer:ObjectContainer3D;
			
				
		public function GE() 
		{
			init();
		}
		

		private function init():void
		{
			initEngine();
			initMaterials();
			initObjects();
			initListeners();
			total=0;
			t=new Date();
		}
		
	
		private function initEngine():void
		{
			scene = new Scene3D();
			camera = new Camera3D();
			camera.z = -50;
						
			view = new View3D();
			view.scene= scene;
			view.camera = camera;
			
			addChild(view);
			
		}

		private function initMaterials():void
		{
			material = new PhongBitmapMaterial(Cast.bitmap(EarthImage));
			material.specular = 0x1A1A1A;
			material.shininess = 10;
		}

		private function initObjects():void
		{
			sphere = new Sphere();
			sphere.material = material;
			sphere.radius = 200;
			sphere.segmentsW = 100;
			sphere.segmentsH = 100;
			
			spherecontainer = new ObjectContainer3D(sphere);
			scene.addChild(spherecontainer);
												
		}
		

		private function initListeners():void
		{
			addEventListener(Event.ENTER_FRAME, onEnterFrame);
			addEventListener(MouseEvent.CLICK,onClick);
			onResize();
		}
		private function onClick(e:Event):void
		{
			var t2:Date=new Date();
			var inv:int=t2.getTime()-t.getTime();
			trace(total);
			trace(inv/total);
		}
		
		private function onEnterFrame(e:Event):void
		{
			total+=1;
			sphere.rotationY += 10;
			view.render();
		}
		
        

}
PV3D源代码

package {
import flash.display.Sprite;
import flash.events.*;
import org.papervision3d.cameras.Camera3D;
import org.papervision3d.materials.*;
import org.papervision3d.materials.utils.MaterialsList;
import org.papervision3d.objects.primitives.Cube;
import org.papervision3d.objects.primitives.Sphere;
import org.papervision3d.render.BasicRenderEngine;
import org.papervision3d.scenes.Scene3D;
import org.papervision3d.view.Viewport3D;
[SWF ( width = '800', height = '600', backgroundColor = '#000000', frameRate = '30' ) ]
public class test extends Sprite 
{
	private var viewport:Viewport3D;
	private var scene:Scene3D;
	private var camera:Camera3D;
	private var renderer:BasicRenderEngine;
	private var cube:Cube;
	private var ball:Sphere;
	private var total:int;
	private var t:Date;
	public function test()
	{
		initPapervision3D();
		createCube();
		beginRender();
		total=0;
		t=new Date();
	}
	private function initPapervision3D():void
	{
		viewport = new Viewport3D();
		addChild(viewport);
		scene = new Scene3D();
		camera = new Camera3D();
		renderer = new BasicRenderEngine();
	}
	private function createCube():void
	{
		var mp:BitmapFileMaterial = new BitmapFileMaterial("earth512.png");
		ball = new Sphere(mp,  500, 100, 100);
       		scene.addChild(ball);
	}
	private function beginRender():void
	{
		addEventListener(Event.ENTER_FRAME, render);
		addEventListener(MouseEvent.CLICK,onClick);
	}
	
	private function onClick(e:MouseEvent):void
	{
		var t2:Date=new Date();
		var inv:int=t2.getTime()-t.getTime();
		trace(total);
		trace(inv/total);
	}
	private function render(e:Event):void
	{
		total+=1;
		ball.yaw(2);
		renderer.renderScene(scene, camera, viewport);
	}
}
}

 

PS:PV3D忘了设置质量,flash给默认为HIGH了,不过性能差距这么明显,改为LOW只会加大差距了。

转载于:https://www.cnblogs.com/wocdev/archive/2010/11/05/1870329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值