correctly initiate/terminate contact constraints
This commit is contained in:
		| @@ -22,6 +22,8 @@ | ||||
| #include <bounce/common/math/vec3.h> | ||||
| #include <bounce/common/math/mat33.h> | ||||
|  | ||||
| class b3Shape; | ||||
|  | ||||
| class b3SpringCloth; | ||||
| class b3StackAllocator; | ||||
|  | ||||
| @@ -56,15 +58,21 @@ private: | ||||
| 	// Compute A and b in Ax = b | ||||
| 	void Compute_A_b(b3SparseMat33& A, b3DenseVec3& b) const; | ||||
|  | ||||
| 	// Compute the initial guess for the iterative solver. | ||||
| 	void Compute_x0(b3DenseVec3& x0); | ||||
|  | ||||
| 	// Compute the constraint projection matrix S. | ||||
| 	void Compute_S(b3Mat33* S); | ||||
| 	 | ||||
| 	// Solve Ax = b using the Modified Conjugate Gradient (MCG).  | ||||
| 	// Output x and the residual error f. | ||||
| 	void Solve_MCG(b3DenseVec3& x, b3DenseVec3& f, u32& iterations, const b3SparseMat33& A, const b3DenseVec3& b) const; | ||||
| 	void Solve_MCG(b3DenseVec3& x0, b3DenseVec3& f, u32& iterations, const b3SparseMat33& A, const b3DenseVec3& b, const b3Mat33* S) const; | ||||
|  | ||||
| 	// Solve Ax = b using MCG with Jacobi preconditioning. | ||||
| 	// Output x and the residual error f. | ||||
| 	// This method is slower than MCG because we have to compute the preconditioning  | ||||
| 	// matrix P, but it can improve convergence. | ||||
| 	void Solve_MPCG(b3DenseVec3& x, b3DenseVec3& f, u32& iterations, const b3SparseMat33& A, const b3DenseVec3& b) const; | ||||
| 	void Solve_MPCG(b3DenseVec3& x0, b3DenseVec3& f, u32& iterations, const b3SparseMat33& A, const b3DenseVec3& b, const b3Mat33* S) const; | ||||
|  | ||||
| 	b3SpringCloth * m_cloth; | ||||
| 	float32 m_h; | ||||
| @@ -87,6 +95,8 @@ private: | ||||
| 	 | ||||
| 	b3Spring* m_springs; | ||||
| 	u32 m_springCount; | ||||
| 	 | ||||
| 	b3Shape** m_shapes; | ||||
| }; | ||||
|  | ||||
| inline u32 b3SpringSolver::GetIterations() const | ||||
|   | ||||
		Reference in New Issue
	
	Block a user