Ejemplo n.º 1
0
        public override bool Intersect(SlimDX.Ray ray, ref float dist)
        {
            bool      hasHit  = false;
            float     nearHit = 99999999;
            IADTChunk hitChunk;

            foreach (var chunk in mChunks)
            {
                float curHit = 0;
                if (chunk.Intersect(ray, ref curHit, out hitChunk))
                {
                    hasHit = true;
                    if (curHit < nearHit)
                    {
                        nearHit = curHit;
                    }
                }
            }

            if (hasHit)
            {
                dist = nearHit;
            }

            return(hasHit);
        }
Ejemplo n.º 2
0
        public void HitModels(SlimDX.Ray camRay, out MdxIntersectionResult result)
        {
            result          = new MdxIntersectionResult();
            result.Distance = -1;
            renderLock.WaitOne();

            foreach (var couple in BatchRenderers)
            {
                float          curDist = 0.0f;
                uint           instanceId;
                SlimDX.Vector3 hitPoint;
                if (couple.Value.Intersector.Intersect(camRay, out curDist, out instanceId, out hitPoint))
                {
                    if (curDist < result.Distance || result.Distance < 0)
                    {
                        result.InstanceID   = instanceId;
                        result.Distance     = curDist;
                        result.Model        = couple.Value.mModelInfo;
                        result.Renderer     = couple.Value;
                        result.InstanceData = result.Renderer.InstanceLoader.GetInstanceById(instanceId);
                        result.HitPoint     = hitPoint;
                        result.HasHit       = true;
                    }
                }
            }
            renderLock.ReleaseMutex();
        }
Ejemplo n.º 3
0
        public static bool Intersect(SlimDX.Ray ray, ref float dist, out IADTChunk hitChunk)
        {
            hitChunk = null;
            if (VisibleChunks.Count == 0)
            {
                return(false);
            }

            bool  hasHit  = false;
            float nearHit = 9999999;

            foreach (var file in VisibleChunks)
            {
                float     curHit = 0;
                IADTChunk tmpHit;
                if (file.Intersect(ray, ref curHit, out tmpHit))
                {
                    hitChunk = tmpHit;
                    hasHit   = true;
                    if (curHit < nearHit)
                    {
                        nearHit = curHit;
                    }
                }
            }

            if (hasHit)
            {
                dist = nearHit;
            }

            return(hasHit);
        }
Ejemplo n.º 4
0
        public bool Intersects(SlimDX.Ray ray, out float nearHit)
        {
            nearHit = 0;
            float curNear = 99999;
            bool  hasHit  = false;

            foreach (var group in mGroups)
            {
                float curHit = 0;
                if (group.Intersects(ray, out curHit))
                {
                    hasHit = true;
                    if (curHit < curNear)
                    {
                        curNear = curHit;
                    }
                }
            }

            nearHit = curNear;
            return(hasHit);
        }
Ejemplo n.º 5
0
 public Ray(Vector3 start, Vector3 dir)
 {
     rdx = new SlimDX.Ray(start.dx(), dir.dx());
 }
Ejemplo n.º 6
0
 public static float?RaycastFace(Face f, Ray r)
 {
     r = r.Transform(Matrix.Invert(f.GetWorldMatrix()));
     return(r.xna().Intersects(new BoundingBox(new Vector3(0, 0, 0), new Vector3(f.Size.X, f.Size.Y, 0))));
 }
 public static Microsoft.Xna.Framework.Ray xna(this SlimDX.Ray v)
 {
     return(new Microsoft.Xna.Framework.Ray(v.Position.xna(), v.Direction.xna()));
 }