예제 #1
0
dCollisionBoxNodeInfo::dCollisionBoxNodeInfo(NewtonCollision* box)
	:dCollisionNodeInfo () 
{
	NewtonCollisionInfoRecord record;
	NewtonCollisionGetInfo(box, &record);
	_ASSERTE (record.m_collisionType == SERIALIZE_ID_BOX);

	dMatrix& offsetMatrix = *((dMatrix*) record.m_offsetMatrix);
	SetName ("box collision");
	m_size = dVector (record.m_box.m_x, record.m_box.m_z, record.m_box.m_y); 
	SetTransform (offsetMatrix);
	SetShapeId (record.m_collisionUserID);

	CalculateGeometryProperies (box, m_geometricInertia, m_geometricCenterAndVolume); 
}
dCollisionCompoundNodeInfo::dCollisionCompoundNodeInfo(NewtonCollision* const compound)
	:dCollisionNodeInfo () 
{
	NewtonCollisionInfoRecord record;
	NewtonCollisionGetInfo(compound, &record);
	dAssert (record.m_collisionType == SERIALIZE_ID_COMPOUND);


	dMatrix& offsetMatrix = *((dMatrix*) record.m_offsetMatrix);
	SetName ("compound collision");

	SetTransform (offsetMatrix);
	SetShapeId (record.m_collisionUserID);

	CalculateGeometryProperies (compound, m_geometricInertia, m_geometricCenterAndVolume); 
}
dCollisionConeNodeInfo::dCollisionConeNodeInfo(NewtonCollision* const cylinder)
	:dCollisionNodeInfo () 
{
	NewtonCollisionInfoRecord record;
	NewtonCollisionGetInfo(cylinder, &record);
	dAssert (record.m_collisionType == SERIALIZE_ID_CONE);

	dMatrix& offsetMatrix = *((dMatrix*) record.m_offsetMatrix);
	SetName ("cone collision");

	m_radius = record.m_cone.m_radio;
	m_height = record.m_cone.m_height;

	SetTransform (offsetMatrix);
	SetShapeId (record.m_collisionUserID);

	CalculateGeometryProperies (cylinder, m_geometricInertia, m_geometricCenterAndVolume); 
}