Esempio n. 1
0
        protected virtual void Split()
        {
            if (this.splitDepth <= maxSplit)
            {
                if (children == null)
                {
                    LatLon leftMidpoint   = LatLon.Average(BL, TL);
                    LatLon rightMidpoint  = LatLon.Average(BR, TR);
                    LatLon topMidpoint    = LatLon.Average(TL, TR);
                    LatLon bottomMidpoint = LatLon.Average(BL, BR);

                    TerrainNode bl = new TerrainNode(this, Quadrant.BL, BL, leftMidpoint, center, bottomMidpoint);
                    TerrainNode tl = new TerrainNode(this, Quadrant.TL, leftMidpoint, TL, topMidpoint, center);
                    TerrainNode tr = new TerrainNode(this, Quadrant.TR, center, topMidpoint, TR, rightMidpoint);
                    TerrainNode br = new TerrainNode(this, Quadrant.BR, bottomMidpoint, center, rightMidpoint, BR);
                    children = new TerrainNode[4]
                    {
                        bl, tl, tr, br
                    };

                    foreach (var child in children)
                    {
                        child.splitDepth = this.splitDepth + 1;
                    }
                }

                IsSplit = true;
            }
        }
Esempio n. 2
0
 private void findNodesToRender(List <TerrainNode> toRender, TerrainNode root, Camera camera)
 {
     if (root.IsVisible(camera))
     {
         if (root.IsSplit)
         {
             foreach (var child in root.Children)
             {
                 findNodesToRender(toRender, child, camera);
             }
         }
         else
         {
             //root.LastRendered = DateTime.Now;
             toRender.Add(root);
         }
     }
 }
Esempio n. 3
0
        public TerrainNode(TerrainNode parent, Quadrant quad, LatLon bl, LatLon tl, LatLon tr, LatLon br)
        {
            Parent = parent;
            Quadrant = quad;

            corners = new LatLon[4]
            {
                bl, tl, tr, br
            };

            latLonExtents = new Extent(BL.Longitude, BL.Latitude, TR.Longitude, TR.Latitude);

            var mercBL = RenderWGS84.ToGoogleBing(BL.Longitude, BL.Latitude);
            var mercTR = RenderWGS84.ToGoogleBing(TR.Longitude, TR.Latitude);
            meterExtents = new Extent(mercBL.X, mercBL.Y, mercTR.X, mercTR.Y);

            center = LatLon.Average(corners);
            splitDepth = 0;

            Vector3D[] transformed = transformCorners();
            this.aabb = BoundingBox.FromPoints(transformed.Select(vec => vec.ToVector3()).ToArray());
            generateSplitBox();
        }
Esempio n. 4
0
        public TerrainNode(TerrainNode parent, Quadrant quad, LatLon bl, LatLon tl, LatLon tr, LatLon br)
        {
            Parent   = parent;
            Quadrant = quad;

            corners = new LatLon[4]
            {
                bl, tl, tr, br
            };

            latLonExtents = new Extent(BL.Longitude, BL.Latitude, TR.Longitude, TR.Latitude);

            var mercBL = RenderWGS84.ToGoogleBing(BL.Longitude, BL.Latitude);
            var mercTR = RenderWGS84.ToGoogleBing(TR.Longitude, TR.Latitude);

            meterExtents = new Extent(mercBL.X, mercBL.Y, mercTR.X, mercTR.Y);

            center     = LatLon.Average(corners);
            splitDepth = 0;

            Vector3D[] transformed = transformCorners();
            this.aabb = BoundingBox.FromPoints(transformed.Select(vec => vec.ToVector3()).ToArray());
            generateSplitBox();
        }
Esempio n. 5
0
 protected TerrainNode(TerrainNode parent, Quadrant quad, LatLon bl, LatLon tl, LatLon tr, LatLon br, int splitD)
     : this(parent, quad, bl, tl, tr, br)
 {
     this.splitDepth = splitD;
 }
Esempio n. 6
0
        protected virtual void Split()
        {
            if (this.splitDepth <= maxSplit)
            {
                if (children == null)
                {
                    LatLon leftMidpoint = LatLon.Average(BL, TL);
                    LatLon rightMidpoint = LatLon.Average(BR, TR);
                    LatLon topMidpoint = LatLon.Average(TL, TR);
                    LatLon bottomMidpoint = LatLon.Average(BL, BR);

                    TerrainNode bl = new TerrainNode(this, Quadrant.BL, BL, leftMidpoint, center, bottomMidpoint);
                    TerrainNode tl = new TerrainNode(this, Quadrant.TL, leftMidpoint, TL, topMidpoint, center);
                    TerrainNode tr = new TerrainNode(this, Quadrant.TR, center, topMidpoint, TR, rightMidpoint);
                    TerrainNode br = new TerrainNode(this, Quadrant.BR, bottomMidpoint, center, rightMidpoint, BR);
                    children = new TerrainNode[4]
                    {
                        bl, tl, tr, br
                    };

                    foreach (var child in children)
                        child.splitDepth = this.splitDepth + 1;
                }

                IsSplit = true;
            }
        }
Esempio n. 7
0
 private void findNodesToRender(List<TerrainNode> toRender, TerrainNode root, Camera camera)
 {
     if (root.IsVisible(camera))
     {
         if (root.IsSplit)
         {
             foreach (var child in root.Children)
                 findNodesToRender(toRender, child, camera);
         }
         else
         {
             //root.LastRendered = DateTime.Now;
             toRender.Add(root);
         }
     }
 }
Esempio n. 8
0
 protected TerrainNode(TerrainNode parent, Quadrant quad, LatLon bl, LatLon tl, LatLon tr, LatLon br, int splitD)
     : this(parent, quad, bl, tl, tr, br)
 {
     this.splitDepth = splitD;
 }