218 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			218 lines
		
	
	
		
			6.7 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  | Bullet Continuous Collision Detection and Physics Library | ||
|  | Copyright (c) 2003-2006 Erwin Coumans  http://continuousphysics.com/Bullet/
 | ||
|  | 
 | ||
|  | This software is provided 'as-is', without any express or implied warranty. | ||
|  | In no event will the authors be held liable for any damages arising from the use of this software. | ||
|  | Permission is granted to anyone to use this software for any purpose, | ||
|  | including commercial applications, and to alter it and redistribute it freely, | ||
|  | subject to the following restrictions: | ||
|  | 
 | ||
|  | 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. | ||
|  | 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. | ||
|  | 3. This notice may not be removed or altered from any source distribution. | ||
|  | */ | ||
|  | 
 | ||
|  | #ifndef BT_SOFTBODY_FLOAT_DATA
 | ||
|  | #define BT_SOFTBODY_FLOAT_DATA
 | ||
|  | 
 | ||
|  | #include "BulletCollision/CollisionDispatch/btCollisionObject.h"
 | ||
|  | #include "BulletDynamics/Dynamics/btRigidBody.h"
 | ||
|  | 
 | ||
|  | 
 | ||
|  | struct	SoftBodyMaterialData | ||
|  | { | ||
|  | 	float	m_linearStiffness; | ||
|  | 	float	m_angularStiffness; | ||
|  | 	float	m_volumeStiffness; | ||
|  | 	int		m_flags; | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftBodyNodeData | ||
|  | { | ||
|  | 	SoftBodyMaterialData		*m_material; | ||
|  | 	btVector3FloatData			m_position; | ||
|  | 	btVector3FloatData			m_previousPosition; | ||
|  | 	btVector3FloatData			m_velocity; | ||
|  | 	btVector3FloatData			m_accumulatedForce; | ||
|  | 	btVector3FloatData			m_normal; | ||
|  | 	float						m_inverseMass; | ||
|  | 	float						m_area; | ||
|  | 	int							m_attach; | ||
|  | 	int							m_pad; | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftBodyLinkData | ||
|  | { | ||
|  | 	SoftBodyMaterialData	*m_material; | ||
|  | 	int						m_nodeIndices[2];			// Node pointers
 | ||
|  | 	float					m_restLength;			// Rest length		
 | ||
|  | 	int						m_bbending;		// Bending link
 | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftBodyFaceData | ||
|  | { | ||
|  | 	btVector3FloatData		m_normal;		// Normal
 | ||
|  | 	SoftBodyMaterialData	*m_material; | ||
|  | 	int						m_nodeIndices[3];			// Node pointers
 | ||
|  | 	float					m_restArea;			// Rest area
 | ||
|  | };	 | ||
|  | 
 | ||
|  | struct	SoftBodyTetraData | ||
|  | { | ||
|  | 	btVector3FloatData		m_c0[4];		// gradients
 | ||
|  | 	SoftBodyMaterialData	*m_material; | ||
|  | 	int						m_nodeIndices[4];			// Node pointers		
 | ||
|  | 	float					m_restVolume;			// Rest volume
 | ||
|  | 	float					m_c1;			// (4*kVST)/(im0+im1+im2+im3)
 | ||
|  | 	float					m_c2;			// m_c1/sum(|g0..3|^2)
 | ||
|  | 	int						m_pad; | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftRigidAnchorData | ||
|  | { | ||
|  | 	btMatrix3x3FloatData	m_c0;			// Impulse matrix
 | ||
|  | 	btVector3FloatData		m_c1;			// Relative anchor
 | ||
|  | 	btVector3FloatData		m_localFrame;		// Anchor position in body space
 | ||
|  | 	btRigidBodyData			*m_rigidBody; | ||
|  | 	int						m_nodeIndex;			// Node pointer
 | ||
|  | 	float					m_c2;			// ima*dt
 | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | 
 | ||
|  | struct	SoftBodyConfigData | ||
|  | { | ||
|  | 	int					m_aeroModel;		// Aerodynamic model (default: V_Point)
 | ||
|  | 	float				m_baumgarte;			// Velocities correction factor (Baumgarte)
 | ||
|  | 	float				m_damping;			// Damping coefficient [0,1]
 | ||
|  | 	float				m_drag;			// Drag coefficient [0,+inf]
 | ||
|  | 	float				m_lift;			// Lift coefficient [0,+inf]
 | ||
|  | 	float				m_pressure;			// Pressure coefficient [-inf,+inf]
 | ||
|  | 	float				m_volume;			// Volume conversation coefficient [0,+inf]
 | ||
|  | 	float				m_dynamicFriction;			// Dynamic friction coefficient [0,1]
 | ||
|  | 	float				m_poseMatch;			// Pose matching coefficient [0,1]		
 | ||
|  | 	float				m_rigidContactHardness;			// Rigid contacts hardness [0,1]
 | ||
|  | 	float				m_kineticContactHardness;			// Kinetic contacts hardness [0,1]
 | ||
|  | 	float				m_softContactHardness;			// Soft contacts hardness [0,1]
 | ||
|  | 	float				m_anchorHardness;			// Anchors hardness [0,1]
 | ||
|  | 	float				m_softRigidClusterHardness;		// Soft vs rigid hardness [0,1] (cluster only)
 | ||
|  | 	float				m_softKineticClusterHardness;		// Soft vs kinetic hardness [0,1] (cluster only)
 | ||
|  | 	float				m_softSoftClusterHardness;		// Soft vs soft hardness [0,1] (cluster only)
 | ||
|  | 	float				m_softRigidClusterImpulseSplit;	// Soft vs rigid impulse split [0,1] (cluster only)
 | ||
|  | 	float				m_softKineticClusterImpulseSplit;	// Soft vs rigid impulse split [0,1] (cluster only)
 | ||
|  | 	float				m_softSoftClusterImpulseSplit;	// Soft vs rigid impulse split [0,1] (cluster only)
 | ||
|  | 	float				m_maxVolume;		// Maximum volume ratio for pose
 | ||
|  | 	float				m_timeScale;		// Time scale
 | ||
|  | 	int					m_velocityIterations;	// Velocities solver iterations
 | ||
|  | 	int					m_positionIterations;	// Positions solver iterations
 | ||
|  | 	int					m_driftIterations;	// Drift solver iterations
 | ||
|  | 	int					m_clusterIterations;	// Cluster solver iterations
 | ||
|  | 	int					m_collisionFlags;	// Collisions flags
 | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftBodyPoseData | ||
|  | { | ||
|  | 	btMatrix3x3FloatData	m_rot;			// Rotation
 | ||
|  | 	btMatrix3x3FloatData	m_scale;			// Scale
 | ||
|  | 	btMatrix3x3FloatData	m_aqq;			// Base scaling
 | ||
|  | 	btVector3FloatData		m_com;			// COM
 | ||
|  | 
 | ||
|  | 	btVector3FloatData		*m_positions;			// Reference positions
 | ||
|  | 	float					*m_weights;	// Weights
 | ||
|  | 	int						m_numPositions; | ||
|  | 	int						m_numWeigts; | ||
|  | 
 | ||
|  | 	int						m_bvolume;		// Is valid
 | ||
|  | 	int						m_bframe;		// Is frame
 | ||
|  | 	float					m_restVolume;		// Rest volume
 | ||
|  | 	int						m_pad; | ||
|  | }; | ||
|  | 
 | ||
|  | struct	SoftBodyClusterData | ||
|  | { | ||
|  | 		btTransformFloatData		m_framexform; | ||
|  | 		btMatrix3x3FloatData		m_locii; | ||
|  | 		btMatrix3x3FloatData		m_invwi; | ||
|  | 		btVector3FloatData			m_com; | ||
|  | 		btVector3FloatData			m_vimpulses[2]; | ||
|  | 		btVector3FloatData			m_dimpulses[2]; | ||
|  | 		btVector3FloatData			m_lv; | ||
|  | 		btVector3FloatData			m_av; | ||
|  | 		 | ||
|  | 		btVector3FloatData			*m_framerefs; | ||
|  | 		int							*m_nodeIndices; | ||
|  | 		float						*m_masses; | ||
|  | 
 | ||
|  | 		int							m_numFrameRefs; | ||
|  | 		int							m_numNodes; | ||
|  | 		int							m_numMasses; | ||
|  | 
 | ||
|  | 		float						m_idmass; | ||
|  | 		float						m_imass; | ||
|  | 		int							m_nvimpulses; | ||
|  | 		int							m_ndimpulses; | ||
|  | 		float						m_ndamping; | ||
|  | 		float						m_ldamping; | ||
|  | 		float						m_adamping; | ||
|  | 		float						m_matching; | ||
|  | 		float						m_maxSelfCollisionImpulse; | ||
|  | 		float						m_selfCollisionImpulseFactor; | ||
|  | 		int							m_containsAnchor; | ||
|  | 		int							m_collide; | ||
|  | 		int							m_clusterIndex; | ||
|  | }; | ||
|  | 
 | ||
|  | 
 | ||
|  | enum	btSoftJointBodyType | ||
|  | { | ||
|  | 	BT_JOINT_SOFT_BODY_CLUSTER=1, | ||
|  | 	BT_JOINT_RIGID_BODY, | ||
|  | 	BT_JOINT_COLLISION_OBJECT | ||
|  | }; | ||
|  | 
 | ||
|  | struct	btSoftBodyJointData | ||
|  | { | ||
|  | 	void						*m_bodyA; | ||
|  | 	void						*m_bodyB; | ||
|  | 	btVector3FloatData			m_refs[2]; | ||
|  | 	float						m_cfm; | ||
|  | 	float						m_erp; | ||
|  | 	float						m_split; | ||
|  | 	int							m_delete; | ||
|  | 	btVector3FloatData			m_relPosition[2];//linear
 | ||
|  | 	int							m_bodyAtype; | ||
|  | 	int							m_bodyBtype; | ||
|  | 	int							m_jointType; | ||
|  | 	int							m_pad; | ||
|  | }; | ||
|  | 
 | ||
|  | ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
 | ||
|  | struct	btSoftBodyFloatData | ||
|  | { | ||
|  | 	btCollisionObjectFloatData	m_collisionObjectData; | ||
|  | 
 | ||
|  | 	SoftBodyPoseData		*m_pose; | ||
|  | 	SoftBodyMaterialData	**m_materials; | ||
|  | 	SoftBodyNodeData		*m_nodes; | ||
|  | 	SoftBodyLinkData		*m_links; | ||
|  | 	SoftBodyFaceData		*m_faces; | ||
|  | 	SoftBodyTetraData		*m_tetrahedra; | ||
|  | 	SoftRigidAnchorData		*m_anchors; | ||
|  | 	SoftBodyClusterData		*m_clusters; | ||
|  | 	btSoftBodyJointData		*m_joints; | ||
|  | 
 | ||
|  | 	int						m_numMaterials; | ||
|  | 	int						m_numNodes; | ||
|  | 	int						m_numLinks; | ||
|  | 	int						m_numFaces; | ||
|  | 	int						m_numTetrahedra; | ||
|  | 	int						m_numAnchors; | ||
|  | 	int						m_numClusters; | ||
|  | 	int						m_numJoints; | ||
|  | 	SoftBodyConfigData		m_config; | ||
|  | }; | ||
|  | 
 | ||
|  | #endif //BT_SOFTBODY_FLOAT_DATA
 | ||
|  | 
 |