コード例 #1
0
        public override double GetHitPointDistance(Shapes.Ray r)
        {
            double dist;

            Shapes.Ray subRay;
            Vect3      tmp = Position + _model.GetBoundingSphere().Position;

            if (RaySphere.IsRayOriginatingInSphere(r.Origin, r.Direction, tmp,
                                                   _model.GetBoundingSphere().Radius))
            {
                tmp    = r.Origin - Position;
                subRay = new Shapes.Ray
                {
                    Origin    = tmp,
                    Direction = r.Direction
                };

                dist = 0;
            }
            else
            {
                dist = RaySphere.GetHitPointRaySphereDistance(r.Origin, r.Direction, tmp,
                                                              _model.GetBoundingSphere().Radius);

                if (double.IsInfinity(dist))
                {
                    return(dist);
                }

                tmp    = r.Origin + r.Direction * dist;
                tmp   -= Position;
                subRay = new Shapes.Ray
                {
                    Origin    = tmp,
                    Direction = r.Direction
                };
            }

            var d = new CollisionData
            {
                Details = RayPath.GetFirstCollision(_model.GetTree(), subRay)
            };

            if (!double.IsInfinity(d.Details.Distance))
            {
                Vect3 hitPointLocal = subRay.Origin + subRay.Direction * d.Details.Distance;
                d.HitPointLocal = hitPointLocal;
                Vect3 hitPointGlobal = hitPointLocal + Position;
                d.HitPointGlobal = hitPointGlobal;
                return(d.Details.Distance + dist);
            }
            _lastCollision[Thread.CurrentThread] = d;
            return(d.Details.Distance);
        }
コード例 #2
0
    public void RegisterSphere(RaySphere s)
    {
        SphereData d = new SphereData();

        d.col = new Vector3(s.renderColor.r, s.renderColor.g, s.renderColor.b);
        d.pos = (s.transform.position);

        //s.GetComponent<SphereCollider>().radius * (float)multiplier *
        d.details = new Vector3(s.transform.localScale.x / 2, s.shininess, s.specIntensity);

        spheres.Add(d);
    }
コード例 #3
0
 public override double GetHitPointDistance(Ray r)
 {
     return(RaySphere.GetHitPointRaySphereDistance(r.Origin, r.Direction, Position, Radius));
 }