64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			64 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# haxebullet
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Bullet 3D Physics](http://bulletphysics.org/) bindings for Haxe.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Based on the webidl approach, works for HL/C & JS:
							 | 
						||
| 
								 | 
							
								- https://github.com/ncannasse/webidl
							 | 
						||
| 
								 | 
							
								- https://github.com/HeapsIO/bullet
							 | 
						||
| 
								 | 
							
								- https://github.com/bulletphysics/bullet3
							 | 
						||
| 
								 | 
							
								- https://github.com/kripken/ammo.js
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Usage
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[Reference](http://bulletphysics.org/mediawiki-1.5.8/index.php/Hello_World)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In order to get HL/C build to work you need to add `haxebullet/bullet` and `haxebullet/hl` directories into your build process so the compiler is able to find bullet sources.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In order to get JS build to work you need to add `haxebullet/ammo/ammo.js` script either by embedding or including it with a script tag.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								``` hx
							 | 
						||
| 
								 | 
							
								var collisionConfiguration = new bullet.Bt.DefaultCollisionConfiguration();
							 | 
						||
| 
								 | 
							
								var dispatcher = new bullet.Bt.CollisionDispatcher(collisionConfiguration);
							 | 
						||
| 
								 | 
							
								var broadphase = new bullet.Bt.DbvtBroadphase();
							 | 
						||
| 
								 | 
							
								var solver = new bullet.Bt.SequentialImpulseConstraintSolver();
							 | 
						||
| 
								 | 
							
								var dynamicsWorld = new bullet.Bt.DiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var groundShape = new bullet.Bt.StaticPlaneShape(new bullet.Bt.Vector3(0, 1, 0), 1);
							 | 
						||
| 
								 | 
							
								var groundTransform = new bullet.Bt.Transform();
							 | 
						||
| 
								 | 
							
								groundTransform.setIdentity();
							 | 
						||
| 
								 | 
							
								groundTransform.setOrigin(new bullet.Bt.Vector3(0, -1, 0));
							 | 
						||
| 
								 | 
							
								var centerOfMassOffsetTransform = new bullet.Bt.Transform();
							 | 
						||
| 
								 | 
							
								centerOfMassOffsetTransform.setIdentity();
							 | 
						||
| 
								 | 
							
								var groundMotionState = new bullet.Bt.DefaultMotionState(groundTransform, centerOfMassOffsetTransform);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var groundRigidBodyCI = new bullet.Bt.RigidBodyConstructionInfo(0.01, groundMotionState, cast groundShape, new bullet.Bt.Vector3(0, 0, 0));
							 | 
						||
| 
								 | 
							
								var groundRigidBody = new bullet.Bt.RigidBody(groundRigidBodyCI);
							 | 
						||
| 
								 | 
							
								dynamicsWorld.addRigidBody(groundRigidBody);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fallShape = new bullet.Bt.SphereShape(1);
							 | 
						||
| 
								 | 
							
								var fallTransform = new bullet.Bt.Transform();
							 | 
						||
| 
								 | 
							
								fallTransform.setIdentity();
							 | 
						||
| 
								 | 
							
								fallTransform.setOrigin(new bullet.Bt.Vector3(0, 50, 0));
							 | 
						||
| 
								 | 
							
								var centerOfMassOffsetFallTransform = new bullet.Bt.Transform();
							 | 
						||
| 
								 | 
							
								centerOfMassOffsetFallTransform.setIdentity();
							 | 
						||
| 
								 | 
							
								var fallMotionState = new bullet.Bt.DefaultMotionState(fallTransform, centerOfMassOffsetFallTransform);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								var fallInertia = new bullet.Bt.Vector3(0, 0, 0);
							 | 
						||
| 
								 | 
							
								// fallShape.calculateLocalInertia(1, fallInertia);
							 | 
						||
| 
								 | 
							
								var fallRigidBodyCI = new bullet.Bt.RigidBodyConstructionInfo(1, fallMotionState, fallShape, fallInertia);
							 | 
						||
| 
								 | 
							
								var fallRigidBody = new bullet.Bt.RigidBody(fallRigidBodyCI);
							 | 
						||
| 
								 | 
							
								dynamicsWorld.addRigidBody(fallRigidBody);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								for (i in 0...3000) {
							 | 
						||
| 
								 | 
							
									dynamicsWorld.stepSimulation(1 / 60);
							 | 
						||
| 
								 | 
							
									
							 | 
						||
| 
								 | 
							
									var trans = new bullet.Bt.Transform();
							 | 
						||
| 
								 | 
							
									var m = fallRigidBody.getMotionState();
							 | 
						||
| 
								 | 
							
									m.getWorldTransform(trans);
							 | 
						||
| 
								 | 
							
									trace(trans.getOrigin().y());
							 | 
						||
| 
								 | 
							
									trans.delete();
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ...delete();
							 | 
						||
| 
								 | 
							
								```
							 |