Papervision3d QuadTree四叉树相机的示例
生活随笔
收集整理的這篇文章主要介紹了
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
有疑問請聯系我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
總結
以上是生活随笔為你收集整理的Papervision3d QuadTree四叉树相机的示例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: IDEA开发中,类的头位置生成作者时间信
- 下一篇: 字符串的拼接