PageRenderTime 42ms CodeModel.GetById 20ms RepoModel.GetById 0ms app.codeStats 0ms

/tutos/example07/ColladaCar.hx

http://github.com/sandy3d/sandy-hx
Haxe | 165 lines | 135 code | 29 blank | 1 comment | 0 complexity | 87f02133e7e6fd1e69230018aa630c35 MD5 | raw file
  1. import sandy.core.Scene3D;
  2. import sandy.core.scenegraph.Camera3D;
  3. import sandy.core.scenegraph.Group;
  4. import sandy.core.scenegraph.Shape3D;
  5. import sandy.core.scenegraph.TransformGroup;
  6. import sandy.events.SandyEvent;
  7. import sandy.events.QueueEvent;
  8. import sandy.materials.Appearance;
  9. import sandy.materials.BitmapMaterial;
  10. import sandy.parser.IParser;
  11. import sandy.parser.Parser;
  12. import sandy.parser.ParserStack;
  13. import sandy.util.LoaderQueue;
  14. import flash.display.Sprite;
  15. import flash.events.Event;
  16. import flash.events.KeyboardEvent;
  17. import flash.net.URLRequest;
  18. import flash.ui.Keyboard;
  19. import flash.Lib;
  20. class ColladaCar extends Sprite {
  21. private var scene:Scene3D;
  22. private var camera:Camera3D;
  23. private var tg:TransformGroup;
  24. private var car:Shape3D;
  25. private var wheelLF:Shape3D;
  26. private var wheelRF:Shape3D;
  27. private var wheelLR:Shape3D;
  28. private var wheelRR:Shape3D;
  29. private var queue:LoaderQueue;
  30. private var parserStack:ParserStack;
  31. public function new () {
  32. super();
  33. timer = flash.Lib.getTimer();
  34. var parser:IParser = Parser.create("../assets/models/COLLADA/car.DAE",Parser.COLLADA );
  35. var parserLF:IParser = Parser.create("../assets/models/COLLADA/wheel_Front_L.DAE",Parser.COLLADA );
  36. var parserRF:IParser = Parser.create("../assets/models/COLLADA/wheel_Front_R.DAE",Parser.COLLADA );
  37. var parserLR:IParser = Parser.create("../assets/models/COLLADA/wheel_Rear_L.DAE",Parser.COLLADA );
  38. var parserRR:IParser = Parser.create("../assets/models/COLLADA/wheel_Rear_R.DAE",Parser.COLLADA );
  39. parserStack = new ParserStack();
  40. parserStack.add("carParser",parser);
  41. parserStack.add("wheelLFParser",parserLF);
  42. parserStack.add("wheelRFParser",parserRF);
  43. parserStack.add("wheelLRParser",parserLR);
  44. parserStack.add("wheelRRParser",parserRR);
  45. parserStack.addEventListener(ParserStack.COMPLETE, parserComplete );
  46. parserStack.start();
  47. }
  48. private function parserComplete(pEvt:Event ):Void
  49. {
  50. car = untyped parserStack.getGroupByName("carParser").children[0];
  51. wheelLF = untyped parserStack.getGroupByName("wheelLFParser").children[0];
  52. wheelRF = untyped parserStack.getGroupByName("wheelRFParser").children[0];
  53. wheelLR = untyped parserStack.getGroupByName("wheelLRParser").children[0];
  54. wheelRR = untyped parserStack.getGroupByName("wheelRRParser").children[0];
  55. loadSkins();
  56. trace( flash.Lib.getTimer() - timer );
  57. }
  58. var timer : Float;
  59. private function loadSkins(){
  60. queue = new LoaderQueue();
  61. queue.add( "carSkin", new URLRequest("../assets/textures/car.jpg") );
  62. queue.add( "wheels", new URLRequest("../assets/textures/wheel.jpg") );
  63. queue.addEventListener(SandyEvent.QUEUE_COMPLETE, loadComplete );
  64. queue.start();
  65. }
  66. // Create the scene graph based on the root Group of the scene
  67. private function loadComplete(event:QueueEvent)
  68. {
  69. camera = new Camera3D( 600, 300 );
  70. camera.y = 30;
  71. camera.z = -200;
  72. camera.near = 10;
  73. var root:Group = createScene();
  74. scene = new Scene3D( "scene", this, camera, root );
  75. addEventListener( Event.ENTER_FRAME, enterFrameHandler );
  76. Lib.current.stage.addEventListener(KeyboardEvent.KEY_DOWN, keyPressedHandler);
  77. Lib.current.stage.addChild(this);
  78. }
  79. private function createScene():Group
  80. {
  81. var g:Group = new Group();
  82. tg = new TransformGroup('myGroup');
  83. var bd = Reflect.field( queue.data.get( "carSkin" ), "bitmapData" );
  84. var material:BitmapMaterial = new BitmapMaterial( bd );
  85. var app:Appearance = new Appearance( material );
  86. car.appearance = app;
  87. bd = Reflect.field( queue.data.get( "wheels" ), "bitmapData" );
  88. var materialW:BitmapMaterial = new BitmapMaterial( bd );
  89. var appW:Appearance = new Appearance( materialW );
  90. wheelLF.appearance = appW;
  91. wheelRF.appearance = appW;
  92. wheelLR.appearance = appW;
  93. wheelRR.appearance = appW;
  94. car.useSingleContainer = false;
  95. wheelLF.useSingleContainer = false;
  96. wheelRF.useSingleContainer = false;
  97. wheelLR.useSingleContainer = false;
  98. wheelRR.useSingleContainer = false;
  99. tg.addChild( wheelLF );
  100. tg.addChild( wheelRF );
  101. tg.addChild( wheelLR );
  102. tg.addChild( wheelRR );
  103. tg.addChild( car );
  104. tg.rotateY = -130;
  105. g.addChild( tg );
  106. return g;
  107. }
  108. function keyPressedHandler( event:KeyboardEvent ):Void {
  109. switch( event.keyCode ) {
  110. case Keyboard.UP: // KEY_UP
  111. tg.roll += 2;
  112. case Keyboard.DOWN: // KEY_DOWN
  113. tg.roll -= 2;
  114. case Keyboard.LEFT: // KEY_LEFT
  115. tg.pan -= 2;
  116. case Keyboard.RIGHT: // KEY_RIGHT
  117. tg.pan += 1;
  118. case Keyboard.PAGE_DOWN: // PAGE_DOWN
  119. tg.z -= 5;
  120. case Keyboard.PAGE_UP: // PAGE_UP
  121. tg.z += 5;
  122. }
  123. }
  124. function enterFrameHandler( event:Event ):Void {
  125. scene.render();
  126. }
  127. static function main() {
  128. #if !flash
  129. neash.Lib.Init("ColladaCar",400,300);
  130. #end
  131. new ColladaCar();
  132. #if !flash
  133. neash.Lib.Run();
  134. #end
  135. }
  136. }