/src/LoaderMD2Test.as

https://github.com/osoker/away3d-examples-broomstick · ActionScript · 160 lines · 125 code · 34 blank · 1 comment · 6 complexity · 6cdf23b4e04f239bde9cfeadd113a1c2 MD5 · raw file

  1. package
  2. {
  3. import away3d.animators.VertexAnimator;
  4. import away3d.containers.View3D;
  5. import away3d.entities.Mesh;
  6. import away3d.events.AssetEvent;
  7. import away3d.events.LoaderEvent;
  8. import away3d.library.assets.AssetType;
  9. import away3d.library.AssetLibrary;
  10. import away3d.loaders.parsers.MD2Parser;
  11. import away3d.materials.DefaultMaterialBase;
  12. import away3d.materials.methods.EnvMapDiffuseMethod;
  13. import away3d.materials.utils.CubeMap;
  14. import away3d.primitives.SkyBox;
  15. import flash.display.Sprite;
  16. import flash.display.StageAlign;
  17. import flash.display.StageScaleMode;
  18. import flash.events.Event;
  19. import flash.media.Sound;
  20. import flash.media.SoundTransform;
  21. import flash.net.URLRequest;
  22. [SWF(width="1024", height="576", frameRate="60", backgroundColor="0x000000")]
  23. public class LoaderMD2Test extends Sprite
  24. {
  25. private var _view : View3D;
  26. private var _mesh : Mesh;
  27. [Embed(source="/../embeds/ogrespec.jpg")]
  28. private var Spec : Class;
  29. [Embed(source="/../embeds/ogrebump_NRM.png")]
  30. private var Norm : Class;
  31. [Embed(source="/../embeds/audio.mp3")]
  32. private var Audio : Class;
  33. [Embed(source="/../embeds/envMap/arch_positive_x.jpg")]
  34. private var EnvPosX : Class;
  35. [Embed(source="/../embeds/envMap/arch_positive_y.jpg")]
  36. private var EnvPosY : Class;
  37. [Embed(source="/../embeds/envMap/arch_positive_z.jpg")]
  38. private var EnvPosZ : Class;
  39. [Embed(source="/../embeds/envMap/arch_negative_x.jpg")]
  40. private var EnvNegX : Class;
  41. [Embed(source="/../embeds/envMap/arch_negative_y.jpg")]
  42. private var EnvNegY : Class;
  43. [Embed(source="/../embeds/envMap/arch_negative_z.jpg")]
  44. private var EnvNegZ : Class;
  45. [Embed(source="/../embeds/diffuseEnvMap/night_m04_posX.jpg")]
  46. private var DiffPosX : Class;
  47. [Embed(source="/../embeds/diffuseEnvMap/night_m04_posY.jpg")]
  48. private var DiffPosY : Class;
  49. [Embed(source="/../embeds/diffuseEnvMap/night_m04_posZ.jpg")]
  50. private var DiffPosZ : Class;
  51. [Embed(source="/../embeds/diffuseEnvMap/night_m04_negX.jpg")]
  52. private var DiffNegX : Class;
  53. [Embed(source="/../embeds/diffuseEnvMap/night_m04_negY.jpg")]
  54. private var DiffNegY : Class;
  55. [Embed(source="/../embeds/diffuseEnvMap/night_m04_negZ.jpg")]
  56. private var DiffNegZ : Class;
  57. private var _envMap : CubeMap;
  58. private var _timeScale : Number = 3;
  59. public function LoaderMD2Test()
  60. {
  61. init3D();
  62. //Sound(new Audio()).play(0, int.MAX_VALUE, new SoundTransform(.25));
  63. initLoad();
  64. addEventListener(Event.ENTER_FRAME, handleEnterFrame);
  65. stage.scaleMode = StageScaleMode.NO_SCALE;
  66. stage.align = StageAlign.TOP_LEFT;
  67. stage.addEventListener(Event.RESIZE, onStageResize);
  68. }
  69. private function init3D() : void
  70. {
  71. _view = new View3D();
  72. _view.antiAlias = 4;
  73. _view.camera.lens.far = 30000;
  74. addChild(_view);
  75. _envMap = new CubeMap( new EnvPosX().bitmapData, new EnvNegX().bitmapData,
  76. new EnvPosY().bitmapData, new EnvNegY().bitmapData,
  77. new EnvPosZ().bitmapData, new EnvNegZ().bitmapData);
  78. _view.scene.addChild(new SkyBox(_envMap));
  79. }
  80. private function onStageResize(event : Event) : void
  81. {
  82. _view.width = stage.stageWidth;
  83. _view.height = stage.stageHeight;
  84. }
  85. private function initLoad() : void
  86. {
  87. AssetLibrary.enableParser(MD2Parser);
  88. AssetLibrary.addEventListener(AssetEvent.ASSET_COMPLETE, onAssetRetrieved);
  89. AssetLibrary.load(new URLRequest('assets/ogre.md2'));
  90. }
  91. private function onAssetRetrieved(event : AssetEvent) : void
  92. {
  93. if (event.asset.assetType == AssetType.MESH) {
  94. var material : DefaultMaterialBase;
  95. var diffuseMap : CubeMap;
  96. _mesh = Mesh(event.asset);
  97. _mesh.scaleX = 12;
  98. _mesh.scaleY = 12;
  99. _mesh.scaleZ = 12;
  100. _mesh.y = -300;
  101. _view.scene.addChild(_mesh);
  102. material = DefaultMaterialBase(_mesh.material);
  103. material.specularMap = new Spec().bitmapData;
  104. material.normalMap = new Norm().bitmapData;
  105. diffuseMap = new CubeMap( new DiffPosX().bitmapData, new DiffNegX().bitmapData,
  106. new DiffPosY().bitmapData, new DiffNegY().bitmapData,
  107. new DiffPosZ().bitmapData, new DiffNegZ().bitmapData);
  108. material.diffuseMethod = new EnvMapDiffuseMethod(diffuseMap);
  109. }
  110. else if (event.asset.assetType == AssetType.ANIMATOR) {
  111. var controller : VertexAnimator = VertexAnimator(event.asset);
  112. controller.play("run");
  113. controller.timeScale = _timeScale;
  114. }
  115. }
  116. private function handleEnterFrame(ev : Event) : void
  117. {
  118. if (_mesh) {
  119. _mesh.rotationY += 1;
  120. _mesh.moveRight(2*_timeScale);
  121. _view.camera.lookAt(_mesh.position);
  122. }
  123. _view.render();
  124. }
  125. }
  126. }