forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			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
							 | 
						||
| 
								 | 
							
								
							 |