tested on new branch of papervision

INFO: Papervision3D Public Beta 2.0 - Great White (December 3rd, 2008)
加入effect,可以单独为DisplayObject3D设置filter效果
下面是参照clockmaker的例子写的
(Either JavaScript is not active or you are using an old version of Adobe Flash Player. Please install the newest Flash Player.)

package
{
 import flash.display.*;
 import flash.events.*;
 import flash.filters.*;
 import flash.geom.*;
 import org.papervision3d.cameras.Camera3D;
 
 import org.papervision3d.view.*;
 import org.papervision3d.materials.*;
 import org.papervision3d.objects.*;
 import org.papervision3d.objects.primitives.*
 
    [SWF(width = "720", height = "480", frameRate = "60", backgroundColor = "#FFFFFF")]
 
 public class Test02 extends BasicView
 { 
  // const vars
  static private const CIRCLE_RANGE :int = 150;
  static private const OBJ_LENGTH   :int = 30;
  static private const OBJ_HEIGHT   :int = 20;
  static private const RASEN_LENGTH :int = 2;
  static private const RASEN_RANGE  :int = 500;
  static private const FOCUS_POS    :int = 600;
  
  // 3d vars
  private var list   :Array = [];
  private var rasens :Array = [];
  private var wrap   :DisplayObject3D;

  /**
   * Constructor
   */

  public function Test02()
  {
   super(450, 250);
   
   // init swf
   stage.scaleMode = StageScaleMode.NO_SCALE;
   stage.align     = StageAlign.TOP_LEFT;
   stage.quality   = StageQuality.HIGH;
   
   init();
  }
  
  public function init():void
  {
   //camera
   camera.focus     = 600;
   camera.zoom      = 1;
   camera.x         = 0;
   camera.y         = 0;
   camera.z         = 1000;
   
   // wrap
   wrap = new DisplayObject3D();
   scene.addChild(wrap);
   
   for (var i:int = 0; i < RASEN_LENGTH; i++ )
   {
    var rasen:DisplayObject3D = new DisplayObject3D();
    var rasenRot:Number = 360 * (i / RASEN_LENGTH)* Math.PI / 180;
    rasen.x = RASEN_RANGE * Math.sin(rasenRot);
    rasen.z = RASEN_RANGE * Math.cos(rasenRot);
    wrap.addChild(rasen);
    rasens.push(rasen);
    
    for (var j:int = 0; j < OBJ_LENGTH; j++)
    {
     var rot:Number = 360 * (j / 20)
     
     var m:ColorMaterial = new ColorMaterial(0x0066CC);
     m.doubleSided = true
     
     var o:Plane = new Plane(m, 50, 50, 1, 1);
     
     o.x = CIRCLE_RANGE * Math.sin(rot * Math.PI / 180)
     o.y = OBJ_HEIGHT * j - OBJ_HEIGHT * OBJ_LENGTH /2;
     o.z = CIRCLE_RANGE * Math.cos(rot * Math.PI / 180)
     o.rotationY = rot;
     o.useOwnContainer = true; //
     
     rasen.addChild(o);
     list.push(o);
    }
   }
   
   addEventListener(Event.ENTER_FRAME, enterFrameHandler);
   startRendering();
  }
  
  private function enterFrameHandler(event:Event):void
  {
   //
   wrap.rotationY += ((mouseX / stage.stageWidth * 480) - wrap.rotationY) * .1;
   camera.y += ((mouseY / stage.stageHeight * 2000) - 1000 - camera.y) * .1;
   
   //
   for (var i:int = 0; i < rasens.length; i++)
   {
    rasens[i].yaw(-3);
   }
   
   //
   for (i = 0; i < list.length; i++)
   {
    var o:DisplayObject3D = list[i] as DisplayObject3D;
    
    //
    var deg:Number = Math.abs(calcPointDistanceFromCamera(o) - FOCUS_POS);
    
    //
    var blurVal:int = Math.min(64, deg * .02 << 1 );
    var blurFilter:BlurFilter = new BlurFilter(blurVal, blurVal, 1);
    
    //
    var blightness:Number = deg / 6;
    var blightnessArr:Array =
    [
     1, 0, 0, 0, blightness,
     0, 1, 0, 0, blightness,
     0, 0, 1, 0, blightness,
     0, 0, 0, 1, 0
    ];
    var blightnessFilter:ColorMatrixFilter = new ColorMatrixFilter(blightnessArr);
    
    
    o.filters = [blurFilter, blightnessFilter];
   }
  }
  
  private function calcPointDistanceFromCamera(obj:DisplayObject3D):Number
  {
   var vecX:Number = obj.sceneX - camera.x;
   var vecY:Number = obj.sceneY - camera.y;
   var vecZ:Number = obj.sceneZ - camera.z;
   return Math.sqrt((vecX * vecX) + (vecY * vecY) + (vecZ * vecZ));
  }

 }
}

One Response to “tested on new branch of papervision”

  1. zero cost commissions Says:

    I’m grateful for you because of this wonderful content material. You genuinely did make my day :

Leave a Reply