Ejemplo n.º 1
0
        public static RayCollisionPoint GetCollision(Ray ray, PlaneCollision plane, out float scale1, out float scale2)
        {
            try
            {
                // transformation matrix 2
                Vector3 eq = VectorMathHelper.SolveLinearEquation(-ray.Direction, plane.SpanVector1, plane.SpanVector2,
                                                                  ray.Position - plane.Origin);

                // point of collision
                Vector3 poc = ray.Position + eq.X * ray.Direction;

                scale1 = eq.Y;
                scale2 = eq.Z;


                return(new RayCollisionPoint(poc, plane.Normal, eq.X));
            }
            catch (Exception ex)
            {
                // equation could not be solved or an error occured.

                //Console.WriteLine($"Unable to collide ray with plane.");
                scale1 = 0.0f;
                scale2 = 0.0f;

                return(new RayCollisionPoint());
            }
        }
Ejemplo n.º 2
0
        public static Boolean GetCollision(SphereCollision collidableA, PlaneCollision collidableB, out Vector3 position,
                                           out Vector3 normal, out float scale1, out float scale2)
        {
            Vector3 eq = VectorMathHelper.SolveLinearEquation(collidableB.Normal / collidableB.Normal.Length(), collidableB.SpanVector1,
                                                              collidableB.SpanVector2, collidableA.Position - collidableB.Origin);

            // get the point of collision
            position = collidableB.Origin + eq.Y * collidableB.SpanVector1 + eq.Z * collidableB.SpanVector2;
            normal   = (eq.X < 0 ? -1 : 1) * collidableB.Normal;           // invert normal if the scalar is negative

            scale1 = eq.Y;
            scale2 = eq.Z;

            return(Math.Abs(eq.X) < collidableA.Radius);
        }
Ejemplo n.º 3
0
 public static Vector3 HandleCollision(SphereCollision collider, PlaneCollision collidable, Vector3 position, Vector3 normal)
 {
     return(position + normal * collider.Radius);
 }
Ejemplo n.º 4
0
 public static Boolean GetCollision(SphereCollision collidableA, PlaneCollision collidableB, out Vector3 position,
                                    out Vector3 normal)
 {
     return(GetCollision(collidableA, collidableB, out position, out normal, out var f1, out var f2));
 }
Ejemplo n.º 5
0
 public static RayCollisionPoint GetCollision(Ray ray, PlaneCollision plane)
 {
     return(GetCollision(ray, plane, out float s1, out float s2));
 }
Ejemplo n.º 6
0
 protected override void Start()
 {
     base.Start();
     sphereCollider = gameObject.AddComponent <SphereCollision>();
     planeCollider  = gameObject.AddComponent <PlaneCollision>();
 }