示例#1
0
 public static vecf32 CrossProduct(vecf32 A, vecf32 B)
 {
     return(new vecf32
     {
         x = (A.y * B.z) - (A.z * B.y),
         y = (A.z * B.x) - (A.x * B.z),
         z = (A.x * B.y) - (A.y * B.x)
     });
 }
示例#2
0
 public static vecf32 Subtract(vecf32 A, vecf32 B)
 {
     return(new vecf32
     {
         x = A.x - B.x,
         y = A.y - B.y,
         z = A.z - B.z
     });
 }
示例#3
0
        public static vecf32 Normalise(vecf32 A)
        {
            float a = Length(A);

            return(new vecf32
            {
                x = A.x / a,
                y = A.y / a,
                z = A.z / a
            });
        }
示例#4
0
        private static void GetTriangleData(short[] verts)
        {
            CollisionTri T = new CollisionTri();

            T.v1 = ReadVertex(verts[0]);
            T.v2 = ReadVertex(verts[1]);
            T.v3 = ReadVertex(verts[2]);
            vecf32 AB = Subtract(T.v2, T.v1);
            vecf32 BC = Subtract(T.v3, T.v2);

            T.u_n = Normalise(CrossProduct(AB, BC));
            T.d   = PlaneDist(T.u_n, T.v1);
        }
示例#5
0
 public static float PlaneDist(vecf32 n, vec16 p)
 {
     return(-((n.x * p.x) + (n.y * p.y) + (n.z * p.z)));
 }
示例#6
0
 public static float Length(vecf32 A)
 {
     return((float)Math.Sqrt((A.x * A.x) + (A.y * A.y) + (A.z * A.z)));
 }