BEPUphysics.Space.RayCast C# (CSharp) Метод

RayCast() публичный Метод

Tests a ray against the space, possibly returning multiple hits.
public RayCast ( BEPUutilities.Ray ray, float maximumLength, bool>.Func filter, IList outputRayCastResults ) : bool
ray BEPUutilities.Ray Ray to test.
maximumLength float Maximum length of the ray in units of the ray direction's length.
filter bool>.Func Delegate to prune out hit candidates before performing a cast against them. Return true from the filter to process an entry or false to ignore the entry.
outputRayCastResults IList Hit data of the ray, if any.
Результат bool
        public bool RayCast(Ray ray, float maximumLength, Func<BroadPhaseEntry, bool> filter, IList<RayCastResult> outputRayCastResults)
        {
            var outputIntersections = PhysicsResources.GetBroadPhaseEntryList();
            if (BroadPhase.QueryAccelerator.RayCast(ray, maximumLength, outputIntersections))
            {

                for (int i = 0; i < outputIntersections.Count; i++)
                {
                    RayHit rayHit;
                    BroadPhaseEntry candidate = outputIntersections.Elements[i];
                    if (candidate.RayCast(ray, maximumLength, filter, out rayHit))
                    {
                        outputRayCastResults.Add(new RayCastResult(rayHit, candidate));
                    }
                }
            }
            PhysicsResources.GiveBack(outputIntersections);
            return outputRayCastResults.Count > 0;
        }

Same methods

Space::RayCast ( BEPUutilities.Ray ray, bool>.Func filter, RayCastResult &result ) : bool
Space::RayCast ( BEPUutilities.Ray ray, RayCastResult &result ) : bool
Space::RayCast ( BEPUutilities.Ray ray, float maximumLength, bool>.Func filter, RayCastResult &result ) : bool
Space::RayCast ( BEPUutilities.Ray ray, float maximumLength, IList outputRayCastResults ) : bool
Space::RayCast ( BEPUutilities.Ray ray, float maximumLength, RayCastResult &result ) : bool

Usage Example

Пример #1
0
        /// <summary>
        /// Determines whether there is a cliff nearby.
        /// </summary>
        /// <param name="position">Position to look from.</param>
        /// <param name="facingDirection">Direction to check in.</param>
        /// <param name="filter">Anonymous function to filter out unwanted objects.</param>
        /// <param name="space">The space to check for a cliff in.</param>
        /// <param name="distance">The distance to check at.</param>
        /// <returns>True if a cliff was detected, false otherwise.</returns>
        public static bool FindCliff(Vector3 position, Vector3 facingDirection, Func<BroadPhaseEntry, bool> filter, Space space, float distance)
        {
            // If there is a wall before the requested distance assume there is no cliff.
            Ray forwardRay = new Ray(position, new Vector3(facingDirection.X, 0, facingDirection.Z));
            RayCastResult forwardResult = new RayCastResult();
            space.RayCast(forwardRay, filter, out forwardResult);
            if ((forwardResult.HitData.Location - position).Length() < distance)
            {
                return false;
            }

            facingDirection.Normalize();
            Ray futureDownRay = new Ray(position + new Vector3(facingDirection.X * distance, 0, facingDirection.Z * distance), Vector3.Down);
            RayCastResult result = new RayCastResult();
            space.RayCast(futureDownRay, filter, out result);

            Vector3 drop = result.HitData.Location - futureDownRay.Position;
            if (drop.Y < -6.0f)
            {
                return true;
            }
            else
            {
                return false;
            }
        }
All Usage Examples Of BEPUphysics.Space::RayCast