refactoring
This commit is contained in:
		| @@ -55,7 +55,7 @@ static inline b3Color Color(float32 x, float32 a, float32 b) | ||||
| 	return c; | ||||
| } | ||||
|  | ||||
| class TensionMapping : public ClothTest | ||||
| class TensionMapping : public Test | ||||
| { | ||||
| public: | ||||
| 	TensionMapping() : m_rectangleGarment(5.0f, 5.0f) | ||||
| @@ -66,20 +66,25 @@ public: | ||||
| 		// Create 3D mesh | ||||
| 		m_rectangleClothMesh.Set(&m_rectangleGarmentMesh); | ||||
| 		 | ||||
| 		//   | ||||
| 		b3Mat33 dq = b3Mat33RotationX(0.5f * B3_PI); | ||||
| 		// Rotate the mesh | ||||
| 		b3Mat33 rotation = b3Mat33RotationX(0.5f * B3_PI); | ||||
| 		for (u32 i = 0; i < m_rectangleClothMesh.vertexCount; ++i) | ||||
| 		{ | ||||
| 			m_rectangleClothMesh.vertices[i] = dq * m_rectangleClothMesh.vertices[i]; | ||||
| 			m_rectangleClothMesh.vertices[i] = rotation * m_rectangleClothMesh.vertices[i]; | ||||
| 		} | ||||
|  | ||||
| 		// Create cloth | ||||
| 		b3ClothDef def; | ||||
| 		def.mesh = &m_rectangleClothMesh; | ||||
| 		def.density = 0.2f; | ||||
| 		def.structural = 10000.0f; | ||||
|  | ||||
| 		m_cloth = m_world.CreateCloth(def); | ||||
| 		m_cloth = new b3Cloth(def); | ||||
|  | ||||
| 		m_cloth->SetGravity(b3Vec3(0.0f, -9.8f, 0.0f)); | ||||
| 		m_cloth->SetWorld(&m_world); | ||||
|  | ||||
| 		// Freeze some particles | ||||
| 		b3AABB3 aabb; | ||||
| 		aabb.m_lower.Set(-5.0f, -1.0f, -6.0f); | ||||
| 		aabb.m_upper.Set(5.0f, 1.0f, -4.0f); | ||||
| @@ -91,12 +96,22 @@ public: | ||||
| 				p->SetType(e_staticParticle); | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		m_clothDragger = new b3ClothDragger(&m_ray, m_cloth); | ||||
| 	} | ||||
|  | ||||
| 	~TensionMapping() | ||||
| 	{ | ||||
| 		delete m_clothDragger; | ||||
| 		delete m_cloth; | ||||
| 	} | ||||
|  | ||||
| 	void Step() | ||||
| 	{ | ||||
| 		Test::Step(); | ||||
|  | ||||
| 		m_cloth->Step(g_testSettings->inv_hertz); | ||||
|  | ||||
| 		const b3ClothMesh* mesh = m_cloth->GetMesh(); | ||||
|  | ||||
| 		b3StackArray<b3Vec3, 256> tension; | ||||
| @@ -120,9 +135,9 @@ public: | ||||
| 			} | ||||
| 		} | ||||
|  | ||||
| 		for (u32 i = 0; i < m_rectangleClothMesh.triangleCount; ++i) | ||||
| 		for (u32 i = 0; i < mesh->triangleCount; ++i) | ||||
| 		{ | ||||
| 			b3ClothMeshTriangle* t = m_rectangleClothMesh.triangles + i; | ||||
| 			b3ClothMeshTriangle* t = mesh->triangles + i; | ||||
|  | ||||
| 			b3Vec3 v1 = m_cloth->GetVertexParticle(t->v1)->GetPosition(); | ||||
| 			b3Vec3 v2 = m_cloth->GetVertexParticle(t->v2)->GetPosition(); | ||||
| @@ -154,18 +169,55 @@ public: | ||||
| 			g_draw->DrawSolidTriangle(n2, v1, v3, v2, color); | ||||
| 		} | ||||
|  | ||||
| 		if (m_clothDragger.IsDragging() == true) | ||||
| 		if (m_clothDragger->IsDragging()) | ||||
| 		{ | ||||
| 			g_draw->DrawSegment(m_clothDragger.GetPointA(), m_clothDragger.GetPointB(), b3Color_white); | ||||
| 			b3Vec3 pA = m_clothDragger->GetPointA(); | ||||
| 			b3Vec3 pB = m_clothDragger->GetPointB(); | ||||
|  | ||||
| 			g_draw->DrawPoint(pA, 2.0f, b3Color_green); | ||||
|  | ||||
| 			g_draw->DrawPoint(pB, 2.0f, b3Color_green); | ||||
|  | ||||
| 			g_draw->DrawSegment(pA, pB, b3Color_white); | ||||
| 		} | ||||
|  | ||||
| 		extern u32 b3_clothSolverIterations; | ||||
| 		g_draw->DrawString(b3Color_white, "Iterations = %u", b3_clothSolverIterations); | ||||
| 		g_draw->DrawString(b3Color_white, "Iterations = %d", b3_clothSolverIterations); | ||||
|  | ||||
| 		float32 E = m_cloth->GetEnergy(); | ||||
| 		g_draw->DrawString(b3Color_white, "E = %f", E); | ||||
| 	} | ||||
|  | ||||
| 	void MouseMove(const b3Ray3& pw) | ||||
| 	{ | ||||
| 		Test::MouseMove(pw); | ||||
|  | ||||
| 		if (m_clothDragger->IsDragging() == true) | ||||
| 		{ | ||||
| 			m_clothDragger->Drag(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	void MouseLeftDown(const b3Ray3& pw) | ||||
| 	{ | ||||
| 		Test::MouseLeftDown(pw); | ||||
|  | ||||
| 		if (m_clothDragger->IsDragging() == false) | ||||
| 		{ | ||||
| 			m_clothDragger->StartDragging(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	void MouseLeftUp(const b3Ray3& pw) | ||||
| 	{ | ||||
| 		Test::MouseLeftUp(pw); | ||||
|  | ||||
| 		if (m_clothDragger->IsDragging() == true) | ||||
| 		{ | ||||
| 			m_clothDragger->StopDragging(); | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	static Test* Create() | ||||
| 	{ | ||||
| 		return new TensionMapping(); | ||||
| @@ -174,6 +226,9 @@ public: | ||||
| 	b3RectangleGarment m_rectangleGarment; | ||||
| 	b3GarmentMesh m_rectangleGarmentMesh; | ||||
| 	b3GarmentClothMesh m_rectangleClothMesh; | ||||
|  | ||||
| 	b3Cloth* m_cloth; | ||||
| 	b3ClothDragger* m_clothDragger;  | ||||
| }; | ||||
|  | ||||
| #endif | ||||
		Reference in New Issue
	
	Block a user