public unsafe static bool IsInside(this PolyhedralConvexShape obj, ref OpenTK.Vector3 pt, float tolerance)
 {
     fixed(OpenTK.Vector3 *ptPtr = &pt)
     {
         return(obj.IsInside(ref *(BulletSharp.Math.Vector3 *)ptPtr, tolerance));
     }
 }
 public unsafe static void GetVertex(this PolyhedralConvexShape obj, int i, out OpenTK.Vector3 vtx)
 {
     fixed(OpenTK.Vector3 *vtxPtr = &vtx)
     {
         obj.GetVertex(i, out *(BulletSharp.Math.Vector3 *)vtxPtr);
     }
 }
 public unsafe static void GetEdge(this PolyhedralConvexShape obj, int i, out OpenTK.Vector3 pa, out OpenTK.Vector3 pb)
 {
     fixed(OpenTK.Vector3 *paPtr = &pa)
     {
         fixed(OpenTK.Vector3 *pbPtr = &pb)
         {
             obj.GetEdge(i, out *(BulletSharp.Math.Vector3 *)paPtr, out *(BulletSharp.Math.Vector3 *)pbPtr);
         }
     }
 }
 public unsafe static void GetPlane(this PolyhedralConvexShape obj, out OpenTK.Vector3 planeNormal, out OpenTK.Vector3 planeSupport, int i)
 {
     fixed(OpenTK.Vector3 *planeNormalPtr = &planeNormal)
     {
         fixed(OpenTK.Vector3 *planeSupportPtr = &planeSupport)
         {
             obj.GetPlane(out *(BulletSharp.Math.Vector3 *)planeNormalPtr, out *(BulletSharp.Math.Vector3 *)planeSupportPtr, i);
         }
     }
 }
        private static UnityEngine.Vector3[] CreatePolyhedralConvexShape(PolyhedralConvexShape polyhedralConvexShape, out int[] indices)
        {
            int numVertices = polyhedralConvexShape.NumVertices;
            UnityEngine.Vector3[] vertices = new UnityEngine.Vector3[numVertices * 3];
            for (int i = 0; i < numVertices; i += 4)
            {
                Vector3 v0, v1, v2, v3;
                polyhedralConvexShape.GetVertex(i, out v0);
                polyhedralConvexShape.GetVertex(i + 1, out v1);
                polyhedralConvexShape.GetVertex(i + 2, out v2);
                polyhedralConvexShape.GetVertex(i + 3, out v3);

                UnityEngine.Vector3 v01 = (v0 - v1).ToUnity();
                UnityEngine.Vector3 v02 = (v0 - v2).ToUnity();
                UnityEngine.Vector3 normal = UnityEngine.Vector3.Cross(v01, v02);

                int i3 = i * 3;
                vertices[i3] = v0.ToUnity();
                vertices[i3 + 1] = normal;
                vertices[i3 + 2] = v1.ToUnity();
                vertices[i3 + 3] = normal;
                vertices[i3 + 4] = v2.ToUnity();
                vertices[i3 + 5] = normal;
                vertices[i3 + 6] = v0.ToUnity();
                vertices[i3 + 7] = normal;
                vertices[i3 + 8] = v2.ToUnity();
                vertices[i3 + 9] = normal;
                vertices[i3 + 10] = v3.ToUnity();
            }
            indices = null;
            return vertices;
        }
        private static Vector3[] CreatePolyhedralConvexShape(PolyhedralConvexShape polyhedralConvexShape, out uint[] indices)
        {
            int numVertices = polyhedralConvexShape.NumVertices;
            Vector3[] vertices = new Vector3[numVertices * 3];
            for (int i = 0; i < numVertices; i += 4)
            {
                Vector3 v0, v1, v2, v3;
                polyhedralConvexShape.GetVertex(i, out v0);
                polyhedralConvexShape.GetVertex(i + 1, out v1);
                polyhedralConvexShape.GetVertex(i + 2, out v2);
                polyhedralConvexShape.GetVertex(i + 3, out v3);

                Vector3 v01 = v0 - v1;
                Vector3 v02 = v0 - v2;
                Vector3 normal = Vector3.Cross(v01, v02);

                int i3 = i * 3;
                vertices[i3] = v0;
                vertices[i3 + 1] = normal;
                vertices[i3 + 2] = v1;
                vertices[i3 + 3] = normal;
                vertices[i3 + 4] = v2;
                vertices[i3 + 5] = normal;
                vertices[i3 + 6] = v0;
                vertices[i3 + 7] = normal;
                vertices[i3 + 8] = v2;
                vertices[i3 + 9] = normal;
                vertices[i3 + 10] = v3;
            }
            indices = null;
            return vertices;
        }