package com.dafishinsea.heart { import com.bit101.components.HSlider; import com.dafishinsea.deepsee.DeepScene; import com.dafishinsea.models.Heart; import com.dafishinsea.models.IModel; import com.dafishinsea.renderers.PerspectiveRenderer; import com.dafishinsea.shaders.NormalMapShader; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.Shader; import flash.display.ShaderJob; import flash.display.Shape; import flash.display.Sprite; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.display.TriangleCulling; import flash.events.Event; import flash.filters.ShaderFilter; import flash.geom.Matrix3D; import flash.geom.PerspectiveProjection; import flash.geom.Point; import flash.geom.Rectangle; import flash.geom.Utils3D; import flash.geom.Vector3D; import flash.utils.ByteArray; import net.hires.debug.Stats; [SWF(backgroundColor="0x000000", width="800", height="600", frameRate="50")] public class Heart2 extends Sprite { private var mapWidth:int = 480; private var mapHeight:int = 480; private var colorMap:BitmapData = new BitmapData(mapWidth,mapHeight,false,0xFF0000); private var container:Sprite; private var heart:IModel; //sliders private var lightXposSldr:HSlider; private var lightYposSldr:HSlider; private var lightZposSldr:HSlider; //insert stage size as vars to prevent browser rendering glitches private var stageWidth:Number = 800; private var stageHeight:Number = 600; private var _scene:DeepScene; public function Heart2() { init(); } private function init():void { stage.align = StageAlign.TOP_LEFT; stage.scaleMode = StageScaleMode.NO_SCALE; //container to hold scene container = new Sprite(); container.x = stageWidth/2; container.y = stageHeight/2; addChild(container); //make a scene :) _scene = new DeepScene( container ); _scene.lightDir = new Vector3D(100,100,100); //create models, set positions heart = new Heart( colorMap ); //move heart back into view heart.matrix.prependTranslation(0,-20,300); heart.matrix.prependRotation(180, new Vector3D(0,0,1)); _scene.addModel( heart ); addEventListener(Event.ENTER_FRAME, onEnterFrame); addEventListener(Event.RENDER, render, false, 0, true); makeGUI(); //addChild(new Stats()); render(); } /** * makeGUI */ private function makeGUI():void { //lightPos sliders lightXposSldr = new HSlider(this, 490, 10, onLightDirChange); lightXposSldr.value = 100; lightYposSldr = new HSlider(this, 490, 30, onLightDirChange); lightYposSldr.value = 100; } /** * change handlers for light pos */ private function onLightDirChange(event:Event):void { _scene.lightDir = new Vector3D( (lightXposSldr.value-50)*2, (lightYposSldr.value-50)*2, 100); } private function onEnterFrame(event:Event):void { update(); stage.invalidate();//trigger render event } private function update():void { heart.matrix.prependRotation(0.5, new Vector3D(0,1,0)); } private function render(e:Event=null):void { _scene.render(); } } }