示例#1
0
 public MeshCollisionTester(Mesh mesh)
 {
     _mesh = mesh;
     if (_mesh == null)
     {
         throw new Exception("Mesh cannot be null");
     }
 }
示例#2
0
文件: Mesh.cs 项目: HaKDMoDz/Psy
 public virtual Mesh CopyMesh()
 {
     var ret = new Mesh();
     CopyDataFrom(ret);
     return ret;
 }
示例#3
0
文件: Mesh.cs 项目: HaKDMoDz/Psy
        public virtual void CopyDataFrom(Mesh target)
        {
            foreach (var meshTriangle in target.Triangles)
                AddTriangle(meshTriangle);

            Translation = target.Translation;
            Rotation = target.Rotation;
        }
示例#4
0
        private MeshCollisionResult CollideWithRay(Mesh target, Vector3 point, Vector3 direction)
        {
            var translatedPoint = point - target.Translation;
            int triangleCount;

            var triangles = target.GetAllTriangles(out triangleCount);

            if (triangleCount > 50)
                return CollideInParallel(triangles, translatedPoint, direction);
            return CollideInSeries(triangles, translatedPoint, direction);
        }
示例#5
0
        private MeshCollisionResult CollideWithLineSegment(Mesh target, Vector3 point, Vector3 direction, float distanceSquared)
        {
            var result = CollideWithRay(target, point, direction);

            if (result.RayCollisionResult.HasCollided)
            {
                var colDistanceSqr = result.RayCollisionResult.CollisionPoint.DistanceSquared(point);

                if (colDistanceSqr < distanceSquared)
                    return result;
            }
            return new MeshCollisionResult(new CollisionResult { HasCollided = false }, 0);
        }