You don't need to really use layers or sort them, its only a blur filter
thats applied to the layers.
Just do view.filters
This is for lite
package
{
import away3dlite.cameras.Camera3D;
import away3dlite.containers.ObjectContainer3D;
import away3dlite.containers.Scene3D;
import away3dlite.containers.View3D;
import away3dlite.debug.AwayStats;
import away3dlite.materials.BitmapMaterial;
import away3dlite.primitives.Sphere;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.StageQuality;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Point;
import flash.geom.Vector3D;
// import uk.co.shrewballooba.awaylite.camera.CameraControllerAWL;
/**
* ...
* @author not me
*/
public class MainFur extends Sprite
{
[Embed(source = '../lib/zebra.jpg')]
private var _tigerTextureClass:Class;
private var _tigerTexture:Bitmap;
private var _sphereLayer:Sprite
private var camera:Camera3D;
private var view:View3D;
private var scene:Scene3D;
private var furball:ObjectContainer3D;
public function MainFur():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
stage.quality = StageQuality.LOW;
_tigerTexture = new _tigerTextureClass();
// entry point
initEngine();
createcontainer()
createSpheres( 8, 150, 0, 2);
initListeners();
}
private function initEngine():void
{
scene = new Scene3D();
camera = new Camera3D();
camera.y = -500;
camera.z = -500;
camera.rotationX = -45;
view = new View3D();
view.camera = camera;
view.scene = scene;
addChild(view);
addChild(new AwayStats(view));
// var camC:CameraControllerAWL = new CameraControllerAWL(view,
camera, new Vector3D(0, 0, 0));
}
private function createcontainer():void
{
furball = new ObjectContainer3D();
scene.addChild(furball);
}
private function createSpheres( layerCount:uint, radius:Number,
color:uint, segment_distance:Number):void
{
var sphere:Sphere;
var material:BitmapMaterial;
var texture:BitmapData;
var textures:Array = new Array( layerCount);
var alphaD:Number = 1 / layerCount;
var alpha:Number = alphaD;
var ct:ColorTransform;
var dissolve:Number = 0.9;
for ( var i:Number = 0; i < textures.length; i++)
{
ct = new ColorTransform();
ct.redMultiplier = 1.5-alpha;
ct.greenMultiplier = 1.5-alpha;
ct.blueMultiplier = 1.5-alpha;
ct.alphaMultiplier = alpha;
texture = new BitmapData( _tigerTexture.width,
_tigerTexture.height, true, 0);
texture.draw( _tigerTexture);
texture.pixelDissolve( texture, texture.rect, new Point(
0, 0), 0, (texture.width*texture.height) * dissolve, 0);
texture.colorTransform( texture.rect,
ct);
textures[i] = texture;
alpha += alphaD;
dissolve -= 0.03;
}
//view.filters = [new BlurFilter(6,6)]
//or
_sphereLayer = new Sprite();
view.addChild(_sphereLayer);
_sphereLayer.filters = [new BlurFilter( 6, 6)];
for( i=0; i< layerCount; i++) {
material = new BitmapMaterial( textures[i]);
sphere = new Sphere(material, radius, 9, 6);
radius -= segment_distance;
furball.addChild( sphere);
sphere.layer = _sphereLayer;//comment out if
view.filters
}
}
private function initListeners():void
{
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(Event.RESIZE, onResize);
onResize();
}
private function onEnterFrame(event:Event):void
{
furball.rotationY++
//render scene
view.render();
}
/**
* stage listener for resize events
*/
private function onResize(event:Event = null):void
{
view.x = stage.stageWidth / 2;
view.y = stage.stageHeight / 2;
}
}
}
On 3 February 2011 11:24, originaltomato <[email protected]> wrote:
> Could someone help me port this code to Away3D. It uses render layers in
> papervision and I don't know how to do custom sorting in away?
>
> http://kode80.com/2009/06/25/papervision-fur-3d-texture/
>
> tnx
>