Beispiel #1
0
        public void LocateObject(Model3DGroup m)
        {
            var bounds = new RealBounds3D
            {
                XBounds = new RealBounds
                {
                    Min = (float)m.Bounds.X,
                    Max = (float)(m.Bounds.X + m.Bounds.SizeX)
                },

                YBounds = new RealBounds
                {
                    Min = (float)(m.Bounds.Y),
                    Max = (float)(m.Bounds.Y + m.Bounds.SizeY)
                },

                ZBounds = new RealBounds
                {
                    Min = (float)(m.Bounds.Z),
                    Max = (float)(m.Bounds.Z + m.Bounds.SizeZ)
                }
            };

            ZoomToBounds(bounds);
        }
Beispiel #2
0
        public void ScaleToContent(IEnumerable <Model3DGroup> content)
        {
            var bounds = new RealBounds3D
            {
                XBounds = new RealBounds
                {
                    Min = (float)content.Min(m => m?.Bounds.X),
                    Max = (float)content.Max(m => m?.Bounds.X + m?.Bounds.SizeX)
                },

                YBounds = new RealBounds
                {
                    Min = (float)content.Min(m => m?.Bounds.Y),
                    Max = (float)content.Max(m => m?.Bounds.Y + m?.Bounds.SizeY)
                },

                ZBounds = new RealBounds
                {
                    Min = (float)content.Min(m => m?.Bounds.Z),
                    Max = (float)content.Max(m => m?.Bounds.Z + m?.Bounds.SizeZ)
                }
            };

            ZoomToBounds(bounds);

            var len = bounds.Length;

            CameraSpeed    = Math.Ceiling(len);
            MaxCameraSpeed = Math.Ceiling(len * 6);
            MaxPosition    = new Point3D(
                bounds.XBounds.Max + len * 3,
                bounds.YBounds.Max + len * 3,
                bounds.ZBounds.Max + len * 3);
            MinPosition = new Point3D(
                bounds.XBounds.Min - len * 3,
                bounds.YBounds.Min - len * 3,
                bounds.ZBounds.Min - len * 3);

            MinFarPlaneDistance = 100;
            FarPlaneDistance    = Math.Max(MinFarPlaneDistance, Math.Ceiling(len));
            MaxFarPlaneDistance = Math.Max(MinFarPlaneDistance, Math.Ceiling(len * 3));
        }
Beispiel #3
0
        private void ZoomToBounds(RealBounds3D bounds)
        {
            var len = bounds.Length;

            if (bounds.XBounds.Length / 2 > bounds.YBounds.Length) //side view for long models like weapons
            {
                var p = new Point3D(
                    bounds.XBounds.Midpoint,
                    bounds.YBounds.Max + len * 0.5,
                    bounds.ZBounds.Midpoint);
                MoveCamera(p, new Vector3D(0, 0, -2));
            }
            else //normal camera position
            {
                var p = new Point3D(
                    bounds.XBounds.Max + len * 0.5,
                    bounds.YBounds.Midpoint,
                    bounds.ZBounds.Midpoint);
                MoveCamera(p, new Vector3D(-1, 0, 0));
            }
        }