//it is very slow, so don't use it if you don't need it indeed..
public static void DebugDrawPolyhedron(Vector3 position,Quaternion rotation,Vector3 scale,btPolyhedralConvexShape shape,Color color)
{
if( shape == null )
return;
Matrix4x4 matrix = Matrix4x4.TRS(position,rotation,scale);
Gizmos.color = color;
btConvexPolyhedron poly = shape.getConvexPolyhedron();
if( poly == null )
return;
int faceSize = poly.m_faces.size();
for (int i=0;i < faceSize;i++)
{
Vector3 centroid = new Vector3(0,0,0);
btFace face = poly.m_faces.at(i);
int numVerts = face.m_indices.size();
if (numVerts > 0)
{
int lastV = face.m_indices.at(numVerts-1);
for (int v=0;v < numVerts;v++)
{
int curVert = face.m_indices.at(v);
btVector3 curVertObject = btVector3.GetObjectFromSwigPtr(poly.m_vertices.at(curVert));
centroid.x += curVertObject.x();
centroid.y += curVertObject.y();
centroid.z += curVertObject.z();
btVector3 btv1 = btVector3.GetObjectFromSwigPtr(poly.m_vertices.at(lastV));
btVector3 btv2 = btVector3.GetObjectFromSwigPtr(poly.m_vertices.at(curVert));
Vector3 v1 = new Vector3(btv1.x(),btv1.y(),btv1.z());
Vector3 v2 = new Vector3(btv2.x(),btv2.y(),btv2.z());
v1 = matrix.MultiplyPoint(v1);
v2 = matrix.MultiplyPoint(v2);
Gizmos.DrawLine(v1,v2);
lastV = curVert;
}
}
float s = 1.0f/numVerts;
centroid.x *= s;
centroid.y *= s;
centroid.z *= s;
//normal draw
// {
// Vector3 normalColor = new Vector3(1,1,0);
//
// btVector3 faceNormal(face.m_plane[0],poly->m_faces[i].m_plane[1],poly->m_faces[i].m_plane[2]);
// getDebugDrawer()->drawLine(worldTransform*centroid,worldTransform*(centroid+faceNormal),normalColor);
// }
}
}