fix a lot of issues, add gyroscopic force integrator, add contact polygon winding, add some quaternion constraints, add more tests
This commit is contained in:
		| @@ -41,50 +41,60 @@ public: | ||||
|  | ||||
| 		{ | ||||
| 			b3BodyDef bd; | ||||
| 			bd.position.Set(-2.0f, 5.05f, 0.0f); | ||||
| 			bd.type = b3BodyType::e_staticBody; | ||||
| 			bd.position.Set(0.0f, 7.0f, 0.0f); | ||||
| 			hinge = m_world.CreateBody(bd); | ||||
|  | ||||
| 			b3CapsuleShape shape; | ||||
| 			shape.m_centers[0].Set(0.0f, -3.5f, 0.0f); | ||||
| 			shape.m_centers[1].Set(0.0f, 3.5f, 0.0f); | ||||
| 			shape.m_centers[0].Set(0.0f, 0.0f, -4.0f); | ||||
| 			shape.m_centers[1].Set(0.0f, 0.0f, 4.0f); | ||||
| 			shape.m_radius = 0.5f; | ||||
|  | ||||
| 			 | ||||
| 			b3ShapeDef sd; | ||||
| 			sd.shape = &shape; | ||||
| 			sd.density = 1.0f; | ||||
|  | ||||
| 			hinge->CreateShape(sd); | ||||
| 			m_hinge = hinge; | ||||
| 			 | ||||
| 			m_body = hinge; | ||||
| 		} | ||||
|  | ||||
| 		{ | ||||
| 			b3BodyDef bd; | ||||
| 			bd.type = b3BodyType::e_dynamicBody; | ||||
| 			bd.position.Set(1.0f, 5.05f, 0.0f); | ||||
| 			bd.position.Set(2.0f, 7.0f, 0.0f); | ||||
|  | ||||
| 			door = m_world.CreateBody(bd); | ||||
|  | ||||
| 			m_doorBox.Set(1.0f, 0.5f, 4.0f); | ||||
|  | ||||
| 			b3HullShape hull; | ||||
| 			hull.m_hull = &m_doorHull; | ||||
| 			hull.m_hull = &m_doorBox; | ||||
|  | ||||
| 			b3ShapeDef sdef; | ||||
| 			sdef.shape = &hull; | ||||
| 			sdef.density = 2.0f; | ||||
| 			sdef.density = 1.0f; | ||||
| 			 | ||||
| 			door->CreateShape(sdef); | ||||
| 		} | ||||
| 		 | ||||
| 		{ | ||||
| 			b3Vec3 hingeAxis(0.0f, 1.0f, 0.0f); | ||||
| 			b3Vec3 hingeAnchor(-2.0f, 5.0f, 0.0f); | ||||
| 			b3Vec3 axis(0.0f, 0.0f, 1.0f); | ||||
| 			b3Vec3 anchor(0.0f, 7.0f, 0.0f); | ||||
| 			 | ||||
| 			b3RevoluteJointDef jd; | ||||
| 			jd.Initialize(hinge, door, hingeAxis, hingeAnchor, 0.0f, 0.5f * B3_PI); | ||||
| 			jd.Initialize(hinge, door, axis, anchor, 0.0f, B3_PI); | ||||
| 			jd.motorSpeed = B3_PI; | ||||
| 			jd.maxMotorTorque = 10000.0f; | ||||
| 			 | ||||
| 			jd.maxMotorTorque = door->GetMass() * 10000.0f; | ||||
| 			jd.enableMotor = true; | ||||
|  | ||||
| 			m_rj = (b3RevoluteJoint*)m_world.CreateJoint(jd); | ||||
| 		} | ||||
|  | ||||
| 		// Invalidate the orientation | ||||
| 		b3Vec3 axis(1.0f, 0.0f, 0.0f); | ||||
| 		float32 angle = B3_PI; | ||||
| 		door->SetTransform(door->GetPosition(), axis, angle);		 | ||||
| 	} | ||||
|  | ||||
| 	void KeyDown(int button) | ||||
| @@ -101,17 +111,17 @@ public: | ||||
| 		 | ||||
| 		if (button == GLFW_KEY_D) | ||||
| 		{ | ||||
| 			m_hinge->SetType(e_dynamicBody); | ||||
| 			m_body->SetType(e_dynamicBody); | ||||
| 		} | ||||
|  | ||||
| 		if (button == GLFW_KEY_S) | ||||
| 		{ | ||||
| 			m_hinge->SetType(e_staticBody); | ||||
| 			m_body->SetType(e_staticBody); | ||||
| 		} | ||||
|  | ||||
| 		if (button == GLFW_KEY_K) | ||||
| 		{ | ||||
| 			m_hinge->SetType(e_kinematicBody); | ||||
| 			m_body->SetType(e_kinematicBody); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| @@ -120,7 +130,8 @@ public: | ||||
| 		return new HingeMotor(); | ||||
| 	} | ||||
|  | ||||
| 	b3Body* m_hinge; | ||||
| 	b3BoxHull m_doorBox; | ||||
| 	b3Body* m_body; | ||||
| 	b3RevoluteJoint* m_rj; | ||||
| }; | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user