package { import com.bigspaceship.tween.BigTweenLite; import flash.display.StageAlign; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import org.papervision3d.core.geom.TriangleMesh3D; import org.papervision3d.core.geom.renderables.Triangle3D; import org.papervision3d.core.geom.renderables.Vertex3D; import org.papervision3d.events.FileLoadEvent; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.ColorMaterial; import org.papervision3d.materials.WireframeMaterial; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.special.CompositeMaterial; import org.papervision3d.objects.parsers.DAE; import org.papervision3d.view.BasicView; /** * IcebergDAE1. * * @langversion ActionScript 3.0 * @playerversion Flash 9.0 * * @author Daniel Scheibel * @email d.scheibel@bigspaceship.com * @homepage : http://www.bigspaceship.com * @since 28.04.2008 */ [SWF(width="518", height="400", frameRate="30", backgroundColor="#333333")] public class IcebergDAE1 extends BasicView { private var _light:PointLight3D; private var _mountain_flat:DAE; private var _mountain_raised:DAE; private var _triangleMesh_flat:TriangleMesh3D; private var _triangleMesh_raised:TriangleMesh3D private var _verticesCount:int = 0; public function IcebergDAE1() { //stage.quality = "LOW"; stage.scaleMode = "noScale"; stage.align = StageAlign.TOP_LEFT; super(518, 400, false, false, "CAMERA3D"); camera.zoom = 3; _light = new PointLight3D(false, false); _loadDAEs(); //adding listeners addEventListener(Event.ENTER_FRAME, _onEnterFrame); stage.addEventListener(KeyboardEvent.KEY_DOWN, _onKeyDown); } private function _loadDAEs() : void { //load flat mountain _mountain_flat = new DAE(); _mountain_flat.load('http://labs.bigspaceship.com/upload/2008/04/iceberg/_dae/flat_002.dae'); //add loading listeners _mountain_flat.addEventListener(FileLoadEvent.LOAD_COMPLETE, _onFlatDAELoadComplete); //load raised mountain _mountain_raised = new DAE(); _mountain_raised.load('http://labs.bigspaceship.com/upload/2008/04/iceberg/_dae/raised_002.dae'); //add loading listeners _mountain_raised.addEventListener(FileLoadEvent.LOAD_COMPLETE, _onRaisedDAELoadComplete); } private function _onFlatDAELoadComplete($evt:Event):void{ _triangleMesh_flat = TriangleMesh3D(_mountain_flat.getChildByName('Landscape_None', true)); _triangleMesh_flat.scaleZ = _triangleMesh_flat.scaleX = _triangleMesh_flat.scaleY = 2; //_triangleMesh_flat.material = new ColorMaterial(); _triangleMesh_flat.material = new FlatShadeMaterial(_light, 0x999999, 0x000000); _triangleMesh_flat.material.doubleSided = true; scene.addChild(_triangleMesh_flat, 'triangleMesh_flat'); } private function _onRaisedDAELoadComplete(e:Event):void{ _triangleMesh_raised = TriangleMesh3D(_mountain_raised.getChildByName('Landscape_None', true)); _triangleMesh_raised.scaleZ = _triangleMesh_raised.scaleX = _triangleMesh_raised.scaleY = 2; //_triangleMesh_raised.material = new ColorMaterial(0x00ff00); //_triangleMesh_raised.material = new FlatShadeMaterial(_light, 0xffffff, 0x0000cc); //_triangleMesh_raised.material.doubleSided = true; //scene.addChild(_triangleMesh_raised, 'triangleMesh_raised'); } private function _onEnterFrame(event:Event):void { _light.copyPosition(camera); rotateCamera(); singleRender(); if(_triangleMesh_flat){ for each(var face:Triangle3D in _triangleMesh_flat.geometry.faces) face.createNormal(); for each(var vertex:Vertex3D in _triangleMesh_flat.geometry.vertices) vertex.calculateNormal(); } } private function rotateCamera():void{ var x:Number = (stage.mouseX - stage.stageWidth/2) / 4; camera.moveLeft(x); var y:Number = (stage.mouseY - stage.stageHeight/2) / 6; camera.moveDown(y); if (camera.y > 1000 || camera.y < -200) camera.moveDown(-y); } protected function _onKeyDown($evt:KeyboardEvent):void{ switch( $evt.keyCode ){ case Keyboard.SPACE: //reset plane for(var i:int=0; i < _triangleMesh_flat.geometry.vertices.length; i++){ _triangleMesh_flat.geometry.vertices[i].y = 0; } if(_triangleMesh_flat){ for each(var face:Triangle3D in _triangleMesh_flat.geometry.faces) face.createNormal(); for each(var vertex:Vertex3D in _triangleMesh_flat.geometry.vertices) vertex.calculateNormal(); } //create tweens for(var i:int=0; i < _triangleMesh_raised.geometry.vertices.length; i++){ if(Math.random() > 0.4){ BigTweenLite.to(_triangleMesh_flat.geometry.vertices[i], Math.random()*3+1, {y:_triangleMesh_raised.geometry.vertices[i].y});//, x:Math.random()*16-8+_triangleMesh_raised.geometry.vertices[i].x, z:Math.random()*16-8+_triangleMesh_raised.geometry.vertices[i].z}); }else{ BigTweenLite.to(_triangleMesh_flat.geometry.vertices[i], Math.random()*3+1, {y:+_triangleMesh_raised.geometry.vertices[i].y, x:Math.random()*16-8+_triangleMesh_raised.geometry.vertices[i].x, z:Math.random()*16-8+_triangleMesh_raised.geometry.vertices[i].z}); } } break; } } } }