/** * @author David Lenaerts */ package { import away3d.containers.View3D; import away3d.debug.AwayStats; import away3d.entities.Mesh; import away3d.filters.DepthOfFieldFilter3D; import away3d.lights.DirectionalLight; import away3d.lights.PointLight; import away3d.materials.ColorMaterial; import away3d.materials.DefaultMaterialBase; import away3d.primitives.Plane; import away3d.primitives.Sphere; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.Event; [SWF(width="1024",height="512",backgroundColor="0x000000",frameRate="60")] public class DOFTest extends Sprite { private static const GRID_NUM_X:int = 10; private static const GRID_NUM_Y:int = 10; private static const GRID_NUM_Z:int = 10; private static const GRID_SPACING:int = 150; private static const GRID_ELEMENT_SIZE:int = 20; private var view:View3D; private var roamer:Mesh; private var count1:Number = 0; private var count2:Number = 0; public function DOFTest() { stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; initView3D(); addEventListener(Event.ENTER_FRAME, onEnterFrame); } private function initView3D():void { var element:Mesh; var elementMaterial:DefaultMaterialBase = new ColorMaterial(0x336644); view = new View3D(); var dofFilter:DepthOfFieldFilter3D = new DepthOfFieldFilter3D(32, 32); dofFilter.range = 200; view.filters3d = [dofFilter]; view.camera.x = 0; view.camera.y = 0; view.camera.z = 0; addChild(view); for (var gx:uint = 0; gx < GRID_NUM_X; ++gx) { for (var gy:uint = 0; gy < GRID_NUM_Y; ++gy) { for (var gz:uint = 0; gz < GRID_NUM_Z; ++gz) { element = new Sphere(elementMaterial, GRID_ELEMENT_SIZE); element.x = (gx - GRID_NUM_X * .5) * GRID_SPACING; element.y = (gy - GRID_NUM_Y * .5) * GRID_SPACING; element.z = (gz - GRID_NUM_Z * .5) * GRID_SPACING; view.scene.addChild(element); } } } roamer = new Sphere(elementMaterial, GRID_ELEMENT_SIZE); var lightPoint:PointLight = new PointLight(); lightPoint.color = 0x3399FF; lightPoint.radius = 200; lightPoint.fallOff = 1000; var lightDirectional:DirectionalLight = new DirectionalLight(-1, 1, -1); lightDirectional.color = 0x3399FF; view.scene.addChild(lightDirectional); roamer.addChild(lightPoint); dofFilter.focusTarget = roamer; elementMaterial.ambientColor = 0x3399FF; elementMaterial.lights = [lightPoint, lightDirectional]; view.scene.addChild(roamer); addChild(new AwayStats(view)); } private function onEnterFrame(event:Event):void { count1 += .015; count2 += .008; roamer.x = Math.sin(Math.cos(count1)) * GRID_NUM_X * .5 * GRID_SPACING; roamer.y = Math.sin(count2) * Math.cos(count1) * GRID_NUM_Y * .5 * GRID_SPACING; roamer.z = Math.cos(count2 * .97) * GRID_NUM_Z * .5 * GRID_SPACING; view.camera.lookAt(roamer.position); view.render(); } } }