public void SetupViewProj(BoundingBox worldBBox)
        {
            Vector3 lightPos = worldBBox.Center() - LightDir;
            Vector3 up       = Vector3.Up;

            LightView = Matrix.CreateLookAt(lightPos, worldBBox.Center(), up);
            Vector3[] corners            = worldBBox.GetCorners();
            Vector3[] transformedCorners = new Vector3[8];
            for (int i = 0; i < 8; i++)
            {
                transformedCorners[i] = Vector3.Transform(corners[i], LightView);
            }

            BoundingBox transformedBBox = new BoundingBox {
                Min = MathFunctions.Min(transformedCorners), Max = MathFunctions.Max(transformedCorners)
            };

            float width  = transformedBBox.Max.X - transformedBBox.Min.X;
            float height = transformedBBox.Max.Y - transformedBBox.Min.Y;
            float near   = transformedBBox.Min.Z - 10;
            float far    = transformedBBox.Max.Z + 10;

            LightProj = Matrix.CreateOrthographic(width, height, near, far);
            //LightProj = Matrix.CreatePerspective(ShadowWith, ShadowHeight, 0.1f, 10000);
            //LightProj = Matrix.CreatePerspectiveFieldOfView(MathHelper.Pi - 0.5f, 1f, 1f, 1000f);
        }
Exemple #2
0
        public BoundingBox GetRotatedBoundingBox()
        {
            Vector3 min = Vector3.Transform(BoundingBox.Min - GlobalTransform.Translation, GlobalTransform);
            Vector3 max = Vector3.Transform(BoundingBox.Max - GlobalTransform.Translation, GlobalTransform);

            return(new BoundingBox(MathFunctions.Min(min, max), MathFunctions.Max(min, max)));
        }
Exemple #3
0
        public BoundingBox GetRotatedBoundingBox()
        {
            var min = LocalBoundingBoxOffset - (BoundingBoxSize * 0.5f);
            var max = LocalBoundingBoxOffset + (BoundingBoxSize * 0.5f);

            min = Vector3.Transform(min, GlobalTransform);
            max = Vector3.Transform(max, GlobalTransform);
            return(new BoundingBox(MathFunctions.Min(min, max), MathFunctions.Max(min, max)));
        }
        public Rectangle GetScreenRect(BoundingBox Box, Camera Camera)
        {
            Vector3 ext    = (Box.Max - Box.Min);
            Vector3 center = Box.Center();

            Vector3 p1 = Camera.Project(Box.Min);
            Vector3 p2 = Camera.Project(Box.Max);
            Vector3 p3 = Camera.Project(Box.Min + new Vector3(ext.X, 0, 0));
            Vector3 p4 = Camera.Project(Box.Min + new Vector3(0, ext.Y, 0));
            Vector3 p5 = Camera.Project(Box.Min + new Vector3(0, 0, ext.Z));
            Vector3 p6 = Camera.Project(Box.Min + new Vector3(ext.X, ext.Y, 0));

            Vector3 min = MathFunctions.Min(p1, p2, p3, p4, p5, p6);
            Vector3 max = MathFunctions.Max(p1, p2, p3, p4, p5, p6);

            return(new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y)));
        }
Exemple #5
0
        public Rectangle GetScreenRect(Camera camera)
        {
            BoundingBox box = GetBoundingBox();


            Vector3 ext    = (box.Max - box.Min);
            Vector3 center = box.Center();


            Vector3 p1 = camera.Project(box.Min);
            Vector3 p2 = camera.Project(box.Max);
            Vector3 p3 = camera.Project(box.Min + new Vector3(ext.X, 0, 0));
            Vector3 p4 = camera.Project(box.Min + new Vector3(0, ext.Y, 0));
            Vector3 p5 = camera.Project(box.Min + new Vector3(0, 0, ext.Z));
            Vector3 p6 = camera.Project(box.Min + new Vector3(ext.X, ext.Y, 0));


            Vector3 min = MathFunctions.Min(p1, p2, p3, p4, p5, p6);
            Vector3 max = MathFunctions.Max(p1, p2, p3, p4, p5, p6);

            return(new Rectangle((int)min.X, (int)min.Y, (int)(max.X - min.X), (int)(max.Y - min.Y)));
        }