|
|
最近更新:
●
wan925446570阁下在 讨论区里
发表新主题“怎么配置away3d运行环境啊???...”(20:38:35)
●
yanfaqiang阁下在 讨论区里
回复“《超简易papervision3D基础 ...”(18:08:41)
●
cripel阁下在 讨论区里
回复“...”(14:38:04)
|
|
|
浏览主题:JigLib的示例CarDriveOnTerrain的问题
JigLib的示例CarDriveOnTerrain的问题
海啸Flash3DBitMapData (2010-12-17 19:09:22)
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 138. 139. 140. 141. 142. 143. 144. 145. 146. 147. 148. 149. 150. 151. 152. 153. 154. 155. 156. 157. 158. 159. 160. 161. 162. 163. 164. 165. 166. 167. 168. 169. 170. 171. 172. 173. 174. 175. 176. 177. 178. 179. 180. 181. 182. 183. 184. 185. 186. 187. 188. 189. 190. 191. 192. 193. 194. 195. 196. 197. 198. 199. 200. 201. 202. 203. 204. 205. 206. 207. 208. 209. 210. 211. 212. 213. 214. 215. 216. 217. 218. 219. 220. 221. 222. 223. 224. 225. 226. 227. 228. 229. 230.
|
package { import flash.display.*; import flash.events.*; import flash.ui.Keyboard; import flash.geom.Vector3D; import org.papervision3d.cameras.SpringCamera3D; import org.papervision3d.core.clipping.FrustumClipping; import org.papervision3d.core.math.Number3D; import org.papervision3d.materials.*; import org.papervision3d.materials.utils.MaterialsList; import org.papervision3d.materials.shadematerials.FlatShadeMaterial; import org.papervision3d.materials.shadematerials.PhongMaterial; import org.papervision3d.materials.shaders.PhongShader; import org.papervision3d.materials.shadematerials.GouraudMaterial; import org.papervision3d.materials.shaders.GouraudShader; import org.papervision3d.objects.parsers.*; import org.papervision3d.objects.DisplayObject3D; import org.papervision3d.lights.PointLight3D; import org.papervision3d.events.FileLoadEvent; import org.papervision3d.objects.parsers.Collada; import org.papervision3d.view.BasicView; import org.papervision3d.view.stats.StatsView; import org.papervision3d.view.layer.ViewportLayer; import org.papervision3d.view.layer.util.ViewportLayerSortMode; import flash.display.Bitmap; import flash.display.Loader; import flash.events.Event; import flash.net.URLRequest; import org.papervision3d.lights.PointLight3D; import org.papervision3d.materials.BitmapMaterial; import org.papervision3d.materials.shaders.FlatShader; import org.papervision3d.materials.shaders.ShadedMaterial; import org.papervision3d.objects.primitives.Sphere;
import jiglib.cof.JConfig; import jiglib.math.*; import jiglib.physics.*; import jiglib.geometry.*; import jiglib.vehicles.JCar; import jiglib.vehicles.JWheel; import jiglib.plugin.papervision3d.*;
[SWF(width="1000", height="750", backgroundColor="#ffffff", frameRate="60")] public class CarDriveOnTerrain extends BasicView { [Embed(source="hightmap2.jpg")] public var TERRIAN_MAP:Class; private var springCamera:SpringCamera3D; private var mylight:PointLight3D; private var terrain:JTerrain; private var carBody:JCar; private var carSkin:Collada; private var steerFR :DisplayObject3D; private var steerFL :DisplayObject3D; private var wheelFR :DisplayObject3D; private var wheelFL :DisplayObject3D; private var wheelBR :DisplayObject3D; private var wheelBL :DisplayObject3D; private var vplObjects:ViewportLayer; private var physics:Papervision3DPhysics; public function CarDriveOnTerrain() { super(800, 600, true, true); stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler ); stage.addEventListener( KeyboardEvent.KEY_UP, keyUpHandler ); init3D(); } private function init3D():void { physics = new Papervision3DPhysics(scene, 8);
renderer.clipping = new FrustumClipping(FrustumClipping.NEAR); viewport.containerSprite.sortMode = ViewportLayerSortMode.INDEX_SORT; springCamera = new SpringCamera3D(); springCamera.y = 5000; springCamera.mass = 10; springCamera.damping = 10; springCamera.stiffness = 1; springCamera.positionOffset = new Number3D(0, 100, -150); mylight = new PointLight3D(true, true); mylight.y = 5000; var terrainBMD:Bitmap = new TERRIAN_MAP; var shadeMateria:FlatShadeMaterial = new FlatShadeMaterial(mylight, 0x77ee77); var shadeMaterial:PhongMaterial = new PhongMaterial(mylight,0x32FFFF, 0x00FF00,100); //create terrain terrain = physics.createTerrain(terrainBMD.bitmapData, shadeMateria, 10000, 10000, 800, 45, 45); viewport.getChildLayer(DisplayObject3D(terrain.terrainMesh)).layerIndex = 0; //init car skin shadeMateria = new FlatShadeMaterial(mylight,0xeeeeff); var materiaList:MaterialsList = new MaterialsList(); materiaList.addMaterial(shadeMateria,"all"); carSkin = new Collada("car.DAE", materiaList, 0.01); carSkin.addEventListener(FileLoadEvent.LOAD_COMPLETE,onCarLoaded); springCamera.target = carSkin; var stats:StatsView = new StatsView(renderer); addChild(stats); } private function onCarLoaded(e:FileLoadEvent):void { scene.addChild(carSkin); //init car physics carBody = new JCar(new Pv3dMesh(carSkin)); carBody.setCar(40,1,400); carBody.chassis.moveTo(new Vector3D( 4000, 300, -3000)); carBody.chassis.mass = 15; carBody.chassis.sideLengths = new Vector3D(40, 20, 90); physics.addBody(carBody.chassis); carBody.setupWheel("WheelFL", new Vector3D( -20, -10, 25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2); carBody.setupWheel("WheelFR", new Vector3D(20, -10, 25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2); carBody.setupWheel("WheelBL", new Vector3D( -20, -10, -25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2); carBody.setupWheel("WheelBR", new Vector3D(20, -10, -25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2); var shadeMateria:FlatShadeMaterial = new FlatShadeMaterial(mylight, 0x777777); var shadeMaterial:PhongMaterial = new PhongMaterial(mylight,0xFFFFFF, 0x777777,100); steerFL = carSkin.getChildByName( "WheelFL", true ); steerFR = carSkin.getChildByName( "WheelFR", true ); wheelFL = carSkin.getChildByName( "WheelFL_PIVOT", true ); wheelFL.material = shadeMaterial; wheelFR = carSkin.getChildByName( "WheelFR_PIVOT", true ); wheelFR.material = shadeMaterial; wheelBL = carSkin.getChildByName( "WheelBL", true ); wheelBL.material = shadeMaterial; wheelBR = carSkin.getChildByName( "WheelBR", true ); wheelBR.material = shadeMaterial; var vplCar:ViewportLayer = viewport.getChildLayer(carSkin.getChildByName("Chassis",true)); vplCar.addDisplayObject3D(wheelFR); vplCar.addDisplayObject3D(wheelFL); vplCar.addDisplayObject3D(wheelBR); vplCar.addDisplayObject3D(wheelBL); vplCar.layerIndex = 2; startRendering(); } private function keyDownHandler(event :KeyboardEvent):void { switch(event.keyCode) { case Keyboard.UP: carBody.setAccelerate(5); break; case Keyboard.DOWN: carBody.setAccelerate(-5); break; case Keyboard.LEFT: carBody.setSteer(["WheelFL", "WheelFR"], -2); break; case Keyboard.RIGHT: carBody.setSteer(["WheelFL", "WheelFR"], 2); break; case Keyboard.SPACE: carBody.setHBrake(1); break; } }
private function keyUpHandler(event:KeyboardEvent):void { switch(event.keyCode) { case Keyboard.UP: carBody.setAccelerate(0); break; case Keyboard.DOWN: carBody.setAccelerate(0); break; case Keyboard.LEFT: carBody.setSteer(["WheelFL", "WheelFR"], 0); break; case Keyboard.RIGHT: carBody.setSteer(["WheelFL", "WheelFR"], 0); break; case Keyboard.SPACE: carBody.setHBrake(0); } } private function updateWheelSkin():void { steerFL.rotationY = carBody.wheels["WheelFL"].getSteerAngle(); steerFR.rotationY = carBody.wheels["WheelFR"].getSteerAngle(); wheelFL.pitch(carBody.wheels["WheelFL"].getRollAngle()); wheelFR.pitch(carBody.wheels["WheelFR"].getRollAngle()); wheelBL.roll(carBody.wheels["WheelBL"].getRollAngle()); wheelBR.roll(carBody.wheels["WheelBR"].getRollAngle()); steerFL.y = carBody.wheels["WheelFL"].getActualPos().y; steerFR.y = carBody.wheels["WheelFR"].getActualPos().y; wheelBL.y = carBody.wheels["WheelBL"].getActualPos().y; wheelBR.y = carBody.wheels["WheelBR"].getActualPos().y; } protected override function onRenderTick(event:Event = null):void { //physics.step(); physics.engine.integrate(0.1); updateWheelSkin(); renderer.renderScene(scene, springCamera, viewport); } } } |
question
第100条:1.physics.createTerrain是哪种几何体?
2.它的构造器在那?
3.它的参数?
第130条:carBody.setupWheel("WheelFL", new Vector3D( -20, -10, 25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2);的( -20, -10, 25), 1.2, 1.2, 3, 10, 0.5, 0.5, 2 分别为什么意思?
 |
fur3 (2010-12-20 11:50:06) |
我对jiglib也研究不多,不知道其他朋友有没有研究
|
|
|