Pixel3D

三维粒子 everyinch 3616℃ 0评论

在PV3D中普通的DisplayObject3D对象如基本几何体、TriangleMesh3D等通常可以直接以树形层次添加到scene中,而Pixel3D较为特殊,它需要添加到Pixels容器中,而Pixels容器需要以一个BitmapEffectLayer作为参数,标准的写法是:

var bfx:BitmapEffectLayer = new BitmapEffectLayer(viewport,800,600);
bfx.clearBeforeRender = true;
viewport.containerSprite.addLayer(bfx);
var pixels:Pixels = new Pixels(bfx);
var pixel3d:Pixel3D = new Pixel3D();
pixels.addPixel3D(pixel3d);

即首先需要定义一个BitmapEffectLayer,并将这个BitmapEffectLayer添加到viewport中。再定义Pixels容器,并以刚才建立的BitmapEffectLayer作为参数。最后是创建具体的Pixel3D,把创建好的Pixel3D添加到Pixels容器中,至此就结束了所有的步骤。当然重点是确定Pixel3D对象,Pixel3D的构造函数如下:

Pixel3D(color:uint, x:Number = 0, y:Number = 0, z:Number = 0)

需要为Pixel3D指定颜色以及x,y,z的位置。颜色一般指定为Math.random()*0xffffffff这样的随机数。创建Pixel3D所需要的BitmapEffectLayer、Pixels和Pixel3D分别位于:

org.papervision3d.core.effects.BitmapLayerEffect
org.papervision3d.core.geom.Pixels
org.papervision3d.core.geom.renderables.Pixel3D

所以需要预先导入。下面制作一个简单的示例用来演示这个过程,类文件名为Pixel3DTest.as,源代码如下:
package{
import flash.events.Event;
import flash.filters.GlowFilter;

import org.papervision3d.core.effects.BitmapLayerEffect;
import org.papervision3d.core.geom.Pixels;
import org.papervision3d.core.geom.renderables.Pixel3D;
import org.papervision3d.objects.DisplayObject3D;
import org.papervision3d.view.BasicView;
import org.papervision3d.view.layer.BitmapEffectLayer;

[SWF(width=”800″, height=”600″, frameRate=”60″)]
public class Pixel3DTest extends BasicView{
private var container:DisplayObject3D;

public function Pixel3DTest(){
container = new DisplayObject3D;

var bfx:BitmapEffectLayer = new BitmapEffectLayer(viewport,800,600);
bfx.clearBeforeRender = true;
viewport.containerSprite.addLayer(bfx);
var pixels:Pixels = new Pixels(bfx);
for(var i:int=0;i<6000;i++){ var color:uint = Math.random()*0xffffffff; var px:Number = Math.random()*800-400; var py:Number = Math.random()*600-300; var pz:Number = Math.random()*100-50; var pixel3d:Pixel3D = new Pixel3D(color,px,py,pz); pixels.addPixel3D(pixel3d); } container.addChild(pixels); bfx.addDisplayObject3D(container); bfx.addEffect(new BitmapLayerEffect(new GlowFilter(color,1,8,8,5,7))); scene.addChild(container); startRendering(); } protected override function onRenderTick(event:Event = null):void{ container.yaw(4); super.onRenderTick(event); } } } [/code] 代码创建了BitmapEffectLayer,并将它添加到viewport中。创建Pixels容器,通过for循环创建6000个随即颜色和随机位置的Pixel3D,将它们都添加到Pixels容器中。最后将Pixels容器添加到一个DisplayObject3D类型的容器中。在onRenderTick函数中使container容器围绕Y轴旋转。

分享&收藏

转载请注明:陈童的博客 » Pixel3D

喜欢 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
'; } if( dopt('d_footcode_b') ) echo dopt('d_footcode'); ?>