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; } }
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); } } }
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(); }
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; }
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; } }
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); } } }