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); }
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(); }
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); }
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); }
public Ray(Vector3 start, Vector3 dir) { rdx = new SlimDX.Ray(start.dx(), dir.dx()); }
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())); }