Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package
- {
- //Away3D lib
- import away3d.cameras.Camera3D;
- import away3d.cameras.lenses.PerspectiveLens;
- import away3d.containers.View3D;
- import away3d.debug.AwayStats;
- import away3d.core.base.SubGeometry;
- import away3d.entities.Mesh;
- import away3d.events.LoaderEvent;
- import away3d.extrusions.Elevation;
- import away3d.extrusions.SkinExtrude;
- import away3d.lights.PointLight;
- import away3d.loaders.Loader3D;
- import away3d.loaders.misc.AssetLoaderContext;
- import away3d.loaders.parsers.OBJParser;
- import away3d.materials.BitmapFileMaterial;
- import away3d.materials.BitmapMaterial;
- import away3d.materials.ColorMaterial;
- import away3d.materials.DefaultMaterialBase;
- import away3d.materials.methods.FogMethod;
- import away3d.materials.utils.CubeMap;
- import away3d.primitives.Plane;
- import away3d.primitives.SkyBox;
- import away3d.containers.ObjectContainer3D;
- import flash.display.Bitmap;
- import flash.display.BitmapData;
- import flash.display.Sprite;
- import flash.display.StageAlign;
- import flash.display.StageScaleMode;
- import flash.events.Event;
- import flash.events.KeyboardEvent;
- import flash.geom.Matrix3D;
- import flash.geom.Vector3D;
- import flash.net.URLRequest;
- import jiglib.cof.JConfig;
- import jiglib.debug.Stats;
- import jiglib.geometry.JTriangleMesh;
- import jiglib.math.*;
- import jiglib.physics.*;
- import jiglib.physics.constraint.*;
- import jiglib.plugin.away3d4.*;
- [SWF(width="1280", height="720", frameRate="60", backgroundColor="0x000000")]
- public class LoaderOBJTest extends Sprite
- {
- private var _view : View3D;
- private var _loader : Loader3D;
- private var _light : PointLight;
- public var camera:Camera3D;
- public var plane:Plane;
- public var waveCycle:Number =5;
- public var threeSixtyRads:Number = 360 * (Math.PI / 180);
- private var _speed:Number = 1;
- public var extrude:SkinExtrude;
- [Embed(source="assets/shipwreck/water.jpg")] private var WaterImage:Class;
- private var waterBitmap:Bitmap = new WaterImage();
- [Embed(source="assets/shipwreck/waterM.jpg")] private var WaterImageM:Class;
- private var waterBitmapM:Bitmap = new WaterImageM();
- private var wave:Number = 0;
- //private var _camController : HoverDragController;
- private var _count : Number = 0;
- protected static const MOVESPEED:Number = 100;
- protected static const TURNSPEED:Number = 90;
- protected var forward:Boolean = false;
- protected var backward:Boolean = false;
- protected var turnLeft:Boolean = false;
- protected var turnRight:Boolean = false;
- public var elevate:Elevation;
- private var _cubeMap : CubeMap;
- [Embed(source="assets/skybox/px.jpg")]
- private var EnvPosX:Class;
- [Embed(source="assets/skybox/py.jpg")]
- private var EnvPosY:Class;
- [Embed(source="assets/skybox/pz.jpg")]
- private var EnvPosZ:Class;
- [Embed(source="assets/skybox/nx.jpg")]
- private var EnvNegX:Class;
- [Embed(source="assets/skybox/ny.jpg")]
- private var EnvNegY:Class;
- [Embed(source="assets/skybox/nz.jpg")]
- private var EnvNegZ:Class;
- private var physics:Away3D4Physics;
- private var ballBodies:Vector.<RigidBody>;
- private var boxBodies:Vector.<RigidBody>;
- private var island:ObjectContainer3D;
- private var mylight:PointLight;
- public function LoaderOBJTest()
- {
- _view = new View3D();
- _view.antiAlias = 4;
- this.addChild(_view);
- _light = new PointLight();
- _light.x = 15000;
- _light.z = 15000;
- _light.color = 0xffddbb;
- _view.scene.addChild(_light);
- _view.camera.x = 276;
- _view.camera.y = 100;
- _view.camera.z = 8;
- camera = _view.camera;
- camera.lens = new PerspectiveLens();
- camera.lens.far = 6000;
- addChild(new AwayStats(_view));
- initMesh();
- addEventListener(Event.ENTER_FRAME, onEnterFrame);
- _view.mouseEnabled = true;
- this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
- this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
- this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
- stage.scaleMode = StageScaleMode.NO_SCALE;
- stage.align = StageAlign.TOP_LEFT;
- stage.addEventListener(Event.RESIZE, onStageResize);
- _cubeMap = new CubeMap( new EnvPosX().bitmapData, new EnvNegX().bitmapData,
- new EnvPosY().bitmapData, new EnvNegY().bitmapData,
- new EnvPosZ().bitmapData, new EnvNegZ().bitmapData);
- _view.scene.addChild(new SkyBox(_cubeMap));
- var tex : BitmapData = new BitmapData(512, 512, false, 0);
- tex.perlinNoise(25, 25, 8, 1, false, true, 7, true);
- var fog : FogMethod = new FogMethod(2500, 0x000000);
- var poolMat : BitmapMaterial = new BitmapMaterial(tex);
- poolMat.addMethod(fog);
- poolMat.addMethod(new FogMethod(_view.camera.lens.far * .5, 0x000000));
- JConfig.solverType="FAST";
- physics = new Away3D4Physics(_view, 8);
- this.addChild(new Stats(_view, physics));
- }
- private function onStageResize(event : Event) : void
- {
- _view.width = stage.stageWidth;
- _view.height = stage.stageHeight;
- }
- private function initMesh() : void
- {
- Loader3D.enableParser(OBJParser);
- _loader = new Loader3D();
- _loader.load(new URLRequest('assets/shipwreck/shipwreck.obj'), new OBJParser());
- _loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onSceneResourceComplete);
- _loader.y = 40;
- _loader.scaleX = 0.2;
- _loader.scaleY = 0.2;
- _loader.scaleZ = 0.2;
- var waterMaterial:BitmapMaterial = new BitmapMaterial(waterBitmap.bitmapData);
- waterMaterial.bothSides = true;
- plane = new Plane(waterMaterial, 4000, 4000, 100, 100);
- plane.y = 70;
- plane.rotationX = 90;
- plane.segmentsW = 100;
- plane.segmentsH = 100;
- _view.scene.addChild(plane);
- _view.scene.addChild(_loader);
- }
- private function onSceneResourceComplete(event : LoaderEvent) : void
- {
- island=ObjectContainer3D(event.target);
- var mesh:Mesh=Mesh(island.getChildAt(0));
- mylight = new PointLight();
- _view.scene.addChild(mylight);
- mylight.color = 0xffffff;
- mylight.y = 2000;
- mylight.z = -1000;
- var materia:ColorMaterial = new ColorMaterial(0xeeee00);
- materia.lights=[mylight];
- //create the triangle mesh
- var triangleMesh:JTriangleMesh=physics.createMesh(mesh,new Vector3D(),new Matrix3D(),20,5);
- //create rigid bogies
- ballBodies = new Vector.<RigidBody>();
- for (var i:int = 0; i < 15; i++)
- {
- ballBodies[i] = physics.createSphere(materia, 70);
- ballBodies[i].moveTo(new Vector3D( -1000+2500*Math.random(),1000+1000*Math.random(), -1000+2500*Math.random()));
- }
- }
- private function keyDownHandler(event:KeyboardEvent):void {
- if (event.keyCode == 38)
- {
- this.forward = true;
- }
- else if (event.keyCode == 40)
- {
- this.backward = true;
- }
- else if (event.keyCode == 39)
- {
- this.turnRight = true;
- }
- else if (event.keyCode == 37)
- {
- this.turnLeft = true;
- }
- }
- private function keyUpHandler(event:KeyboardEvent):void {
- if (event.keyCode == 38)
- {
- this.forward = false;
- }
- else if (event.keyCode == 40)
- {
- this.backward = false;
- }
- else if (event.keyCode == 39)
- {
- this.turnRight = false;
- }
- else if (event.keyCode == 37)
- {
- this.turnLeft = false;
- }
- }
- private function incrementWave():void {
- waveCycle += _speed; // angle in radians
- var v:Vector.<Number> = SubGeometry(plane.geometry.subGeometries[0]).vertexData;
- var i:int;
- // manipulate the Z component of each vertex
- for (i = 2; i < v.length; i += 3) {
- // multiply by the sine of the x coordinate, plus offset for animation (normalized to be 0-360 degrees)
- v[i] = Math.sin(((v[i - 2] + waveCycle) / 100) * (threeSixtyRads * 1) ) * 2;
- // add harmonic from Y frequency
- v[i] += Math.sin(((v[i - 1] + waveCycle) / 100) * (threeSixtyRads * 1) ) * 1;
- }
- SubGeometry(plane.geometry.subGeometries[0].updateVertexData(v));
- }
- private function handleEnterFrame(e : Event) : void
- {
- incrementWave();
- if (this.forward)
- _view.camera.moveForward(MOVESPEED * .10);
- else if (this.backward)
- _view.camera.moveBackward(MOVESPEED * .10);
- if (this.turnLeft)
- _view.camera.rotationY -= TURNSPEED * .10;
- else if (this.turnRight)
- _view.camera.rotationY += TURNSPEED * .10;
- //trace(_view.camera.position);
- _view.render();
- }
- private function onEnterFrame(ev : Event) : void
- {
- _count += .003;
- _light.x = Math.sin(_count) * 150000;
- _light.y = 1000;
- _light.z = Math.cos(_count) * 150000;
- physics.step(0.1);
- _view.render();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement