Advertisement
seacloud9

triangleMesh jiglibflash

Dec 19th, 2011
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.59 KB | None | 0 0
  1. package
  2. {
  3. //Away3D lib
  4. import away3d.cameras.Camera3D;
  5. import away3d.cameras.lenses.PerspectiveLens;
  6. import away3d.containers.View3D;
  7. import away3d.debug.AwayStats;
  8. import away3d.core.base.SubGeometry;
  9. import away3d.entities.Mesh;
  10. import away3d.events.LoaderEvent;
  11. import away3d.extrusions.Elevation;
  12. import away3d.extrusions.SkinExtrude;
  13. import away3d.lights.PointLight;
  14. import away3d.loaders.Loader3D;
  15. import away3d.loaders.misc.AssetLoaderContext;
  16. import away3d.loaders.parsers.OBJParser;
  17. import away3d.materials.BitmapFileMaterial;
  18. import away3d.materials.BitmapMaterial;
  19. import away3d.materials.ColorMaterial;
  20. import away3d.materials.DefaultMaterialBase;
  21. import away3d.materials.methods.FogMethod;
  22. import away3d.materials.utils.CubeMap;
  23. import away3d.primitives.Plane;
  24. import away3d.primitives.SkyBox;
  25. import away3d.containers.ObjectContainer3D;
  26.  
  27. import flash.display.Bitmap;
  28. import flash.display.BitmapData;
  29. import flash.display.Sprite;
  30. import flash.display.StageAlign;
  31. import flash.display.StageScaleMode;
  32. import flash.events.Event;
  33. import flash.events.KeyboardEvent;
  34. import flash.geom.Matrix3D;
  35. import flash.geom.Vector3D;
  36. import flash.net.URLRequest;
  37.  
  38. import jiglib.cof.JConfig;
  39. import jiglib.debug.Stats;
  40. import jiglib.geometry.JTriangleMesh;
  41. import jiglib.math.*;
  42. import jiglib.physics.*;
  43. import jiglib.physics.constraint.*;
  44. import jiglib.plugin.away3d4.*;
  45.  
  46.  
  47.  
  48. [SWF(width="1280", height="720", frameRate="60", backgroundColor="0x000000")]
  49. public class LoaderOBJTest extends Sprite
  50. {
  51. private var _view : View3D;
  52. private var _loader : Loader3D;
  53. private var _light : PointLight;
  54. public var camera:Camera3D;
  55. public var plane:Plane;
  56. public var waveCycle:Number =5;
  57. public var threeSixtyRads:Number = 360 * (Math.PI / 180);
  58. private var _speed:Number = 1;
  59. public var extrude:SkinExtrude;
  60. [Embed(source="assets/shipwreck/water.jpg")] private var WaterImage:Class;
  61. private var waterBitmap:Bitmap = new WaterImage();
  62. [Embed(source="assets/shipwreck/waterM.jpg")] private var WaterImageM:Class;
  63. private var waterBitmapM:Bitmap = new WaterImageM();
  64. private var wave:Number = 0;
  65. //private var _camController : HoverDragController;
  66. private var _count : Number = 0;
  67. protected static const MOVESPEED:Number = 100;
  68. protected static const TURNSPEED:Number = 90;
  69. protected var forward:Boolean = false;
  70. protected var backward:Boolean = false;
  71. protected var turnLeft:Boolean = false;
  72. protected var turnRight:Boolean = false;
  73. public var elevate:Elevation;
  74. private var _cubeMap : CubeMap;
  75. [Embed(source="assets/skybox/px.jpg")]
  76. private var EnvPosX:Class;
  77. [Embed(source="assets/skybox/py.jpg")]
  78. private var EnvPosY:Class;
  79. [Embed(source="assets/skybox/pz.jpg")]
  80. private var EnvPosZ:Class;
  81. [Embed(source="assets/skybox/nx.jpg")]
  82. private var EnvNegX:Class;
  83. [Embed(source="assets/skybox/ny.jpg")]
  84. private var EnvNegY:Class;
  85. [Embed(source="assets/skybox/nz.jpg")]
  86. private var EnvNegZ:Class;
  87. private var physics:Away3D4Physics;
  88. private var ballBodies:Vector.<RigidBody>;
  89. private var boxBodies:Vector.<RigidBody>;
  90. private var island:ObjectContainer3D;
  91. private var mylight:PointLight;
  92.  
  93. public function LoaderOBJTest()
  94. {
  95. _view = new View3D();
  96. _view.antiAlias = 4;
  97. this.addChild(_view);
  98. _light = new PointLight();
  99. _light.x = 15000;
  100. _light.z = 15000;
  101. _light.color = 0xffddbb;
  102. _view.scene.addChild(_light);
  103. _view.camera.x = 276;
  104. _view.camera.y = 100;
  105. _view.camera.z = 8;
  106. camera = _view.camera;
  107. camera.lens = new PerspectiveLens();
  108. camera.lens.far = 6000;
  109.  
  110.  
  111. addChild(new AwayStats(_view));
  112. initMesh();
  113.  
  114. addEventListener(Event.ENTER_FRAME, onEnterFrame);
  115. _view.mouseEnabled = true;
  116. this.addEventListener(Event.ENTER_FRAME, handleEnterFrame);
  117. this.stage.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
  118. this.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
  119. stage.scaleMode = StageScaleMode.NO_SCALE;
  120. stage.align = StageAlign.TOP_LEFT;
  121. stage.addEventListener(Event.RESIZE, onStageResize);
  122.  
  123. _cubeMap = new CubeMap( new EnvPosX().bitmapData, new EnvNegX().bitmapData,
  124. new EnvPosY().bitmapData, new EnvNegY().bitmapData,
  125. new EnvPosZ().bitmapData, new EnvNegZ().bitmapData);
  126.  
  127. _view.scene.addChild(new SkyBox(_cubeMap));
  128.  
  129. var tex : BitmapData = new BitmapData(512, 512, false, 0);
  130. tex.perlinNoise(25, 25, 8, 1, false, true, 7, true);
  131. var fog : FogMethod = new FogMethod(2500, 0x000000);
  132. var poolMat : BitmapMaterial = new BitmapMaterial(tex);
  133. poolMat.addMethod(fog);
  134. poolMat.addMethod(new FogMethod(_view.camera.lens.far * .5, 0x000000));
  135.  
  136.  
  137.  
  138. JConfig.solverType="FAST";
  139. physics = new Away3D4Physics(_view, 8);
  140. this.addChild(new Stats(_view, physics));
  141. }
  142.  
  143. private function onStageResize(event : Event) : void
  144. {
  145. _view.width = stage.stageWidth;
  146. _view.height = stage.stageHeight;
  147. }
  148.  
  149. private function initMesh() : void
  150. {
  151. Loader3D.enableParser(OBJParser);
  152. _loader = new Loader3D();
  153. _loader.load(new URLRequest('assets/shipwreck/shipwreck.obj'), new OBJParser());
  154. _loader.addEventListener(LoaderEvent.RESOURCE_COMPLETE, onSceneResourceComplete);
  155. _loader.y = 40;
  156. _loader.scaleX = 0.2;
  157. _loader.scaleY = 0.2;
  158. _loader.scaleZ = 0.2;
  159. var waterMaterial:BitmapMaterial = new BitmapMaterial(waterBitmap.bitmapData);
  160. waterMaterial.bothSides = true;
  161. plane = new Plane(waterMaterial, 4000, 4000, 100, 100);
  162. plane.y = 70;
  163. plane.rotationX = 90;
  164. plane.segmentsW = 100;
  165. plane.segmentsH = 100;
  166. _view.scene.addChild(plane);
  167. _view.scene.addChild(_loader);
  168.  
  169. }
  170.  
  171. private function onSceneResourceComplete(event : LoaderEvent) : void
  172. {
  173. island=ObjectContainer3D(event.target);
  174.  
  175. var mesh:Mesh=Mesh(island.getChildAt(0));
  176. mylight = new PointLight();
  177. _view.scene.addChild(mylight);
  178. mylight.color = 0xffffff;
  179. mylight.y = 2000;
  180. mylight.z = -1000;
  181.  
  182. var materia:ColorMaterial = new ColorMaterial(0xeeee00);
  183. materia.lights=[mylight];
  184.  
  185. //create the triangle mesh
  186. var triangleMesh:JTriangleMesh=physics.createMesh(mesh,new Vector3D(),new Matrix3D(),20,5);
  187.  
  188. //create rigid bogies
  189.  
  190. ballBodies = new Vector.<RigidBody>();
  191. for (var i:int = 0; i < 15; i++)
  192. {
  193. ballBodies[i] = physics.createSphere(materia, 70);
  194. ballBodies[i].moveTo(new Vector3D( -1000+2500*Math.random(),1000+1000*Math.random(), -1000+2500*Math.random()));
  195. }
  196. }
  197.  
  198. private function keyDownHandler(event:KeyboardEvent):void {
  199. if (event.keyCode == 38)
  200. {
  201. this.forward = true;
  202. }
  203. else if (event.keyCode == 40)
  204. {
  205. this.backward = true;
  206. }
  207. else if (event.keyCode == 39)
  208. {
  209. this.turnRight = true;
  210. }
  211. else if (event.keyCode == 37)
  212. {
  213. this.turnLeft = true;
  214. }
  215.  
  216. }
  217.  
  218. private function keyUpHandler(event:KeyboardEvent):void {
  219. if (event.keyCode == 38)
  220. {
  221. this.forward = false;
  222. }
  223. else if (event.keyCode == 40)
  224. {
  225. this.backward = false;
  226. }
  227. else if (event.keyCode == 39)
  228. {
  229. this.turnRight = false;
  230. }
  231. else if (event.keyCode == 37)
  232. {
  233. this.turnLeft = false;
  234. }
  235.  
  236. }
  237.  
  238. private function incrementWave():void {
  239. waveCycle += _speed; // angle in radians
  240. var v:Vector.<Number> = SubGeometry(plane.geometry.subGeometries[0]).vertexData;
  241. var i:int;
  242. // manipulate the Z component of each vertex
  243. for (i = 2; i < v.length; i += 3) {
  244. // multiply by the sine of the x coordinate, plus offset for animation (normalized to be 0-360 degrees)
  245. v[i] = Math.sin(((v[i - 2] + waveCycle) / 100) * (threeSixtyRads * 1) ) * 2;
  246. // add harmonic from Y frequency
  247. v[i] += Math.sin(((v[i - 1] + waveCycle) / 100) * (threeSixtyRads * 1) ) * 1;
  248. }
  249.  
  250. SubGeometry(plane.geometry.subGeometries[0].updateVertexData(v));
  251.  
  252. }
  253.  
  254. private function handleEnterFrame(e : Event) : void
  255. {
  256. incrementWave();
  257.  
  258. if (this.forward)
  259. _view.camera.moveForward(MOVESPEED * .10);
  260. else if (this.backward)
  261. _view.camera.moveBackward(MOVESPEED * .10);
  262.  
  263. if (this.turnLeft)
  264. _view.camera.rotationY -= TURNSPEED * .10;
  265. else if (this.turnRight)
  266. _view.camera.rotationY += TURNSPEED * .10;
  267.  
  268. //trace(_view.camera.position);
  269. _view.render();
  270.  
  271. }
  272.  
  273. private function onEnterFrame(ev : Event) : void
  274. {
  275. _count += .003;
  276. _light.x = Math.sin(_count) * 150000;
  277. _light.y = 1000;
  278. _light.z = Math.cos(_count) * 150000;
  279. physics.step(0.1);
  280. _view.render();
  281. }
  282. }
  283. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement