Papervision3d QuadTree四叉树相机的示例

[b]【[url]http://www.newflash3d.com[/url]---flash3D先锋队:北京贝武易科技公司】[/b]
有疑问请联系我QQ:363596350
在Papervision3d,新加入的QuadTree(四叉树)渲染方法,很好的解决了Papervision3d中交叉面的显示问题,面少的时候,效率还行。
“QuadrantRenderEngine确实解决了破面现象,但效率实在不敢恭维,特别是面多的时候(如人物)”
下面是一个实际的例子。
单击一下画面,我们就可以在Papervision3d BasicRenderEngine(默认的渲染驱动)与QuadrantRenderEngine(四叉树渲染驱动)之间切换。
[flash=640,480]http://www.ccialuban.com/blogswf/QuadTreeExe01.swf[/flash]
代码如下,贴图您可以用自己的贴图。
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)
}
}
}

[b]【[url]http://www.newflash3d.com[/url]---flash3D先锋队:北京贝武易科技公司】[/b]
有疑问请联系我QQ:363596350
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值