package { import flare.basic.*; import flare.core.*; import flare.loaders.*; import flare.materials.*; import flare.materials.filters.*; import flare.primitives.*; import flare.system.*; import flare.utils.*; import flash.display.*; import flash.display3D.*; import flash.events.*; import flash.geom.*; [SWF( width = 800, height = 450, frameRate = 60 )] /** * @author Ariel Nehmad */ public class Test57_CustomRender2 extends Sprite { private var scene:Scene3D; private var cube:Cube; private var list:Vector. = new Vector.; private var texFilter:TextureMapFilter; private var material:Shader3D; public function Test57_CustomRender2() { scene = new Viewer3D( this, null, 0.4 ); scene.autoResize = true; scene.antialias = 2; scene.skipFrames = false; scene.camera.setPosition( 25, 50, -75 ); scene.camera.lookAt( 0, 0, 0 ); texFilter = new TextureMapFilter( new Texture3D( "tree.png" ) ); material = new Shader3D( "mat", [ texFilter ] ); cube = new Cube( "cube", 10, 10, 10, 1, material ); for ( var i:int = 0; i < 100; i++ ) { var pos:Vector3D = Vector3DUtils.random( -50, 50 ); var speedX:Number = Math.random() * 0.1 - 0.05; var speedY:Number = Math.random() * 0.1 - 0.05; list.push( { pos:pos, offset:new Point(), speedX:speedX, speedY:speedY } ); } scene.addEventListener( Scene3D.RENDER_EVENT, renderEvent ); } private function renderEvent(e:Event):void { var length:int = list.length; for ( var i:int = 0; i < length; i++ ) { var obj:Object = list[i]; obj.offset.x += obj.speedX; obj.offset.y += obj.speedY; texFilter.offsetX = obj.offset.x; texFilter.offsetY = obj.offset.y; cube.setPosition( obj.pos.x, obj.pos.y, obj.pos.z ); cube.draw( false ); } } } }