private void finishTesselation(Point3d[] tesselatorList) { int polygonColor = System.Drawing.Color.FromArgb(m_polygonColor.A, m_polygonColor.R, m_polygonColor.G, m_polygonColor.B).ToArgb(); CustomVertex.PositionNormalColored[] vertices = new CustomVertex.PositionNormalColored[tesselatorList.Length]; for (int i = 0; i < vertices.Length; i++) { Point3d sphericalPoint = tesselatorList[i]; double terrainHeight = 0; if (m_altitudeMode == AltitudeMode.RelativeToGround) { if (World.TerrainAccessor != null) { terrainHeight = World.TerrainAccessor.GetElevationAt( sphericalPoint.Y, sphericalPoint.X, (100.0 / DrawArgs.Camera.ViewRange.Degrees) ); } } Vector3 xyzVector = MathEngine.SphericalToCartesian( sphericalPoint.Y, sphericalPoint.X, World.EquatorialRadius + m_verticalExaggeration * (m_geographicBoundingBox.MaximumAltitude + m_distanceAboveSurface + terrainHeight)); vertices[i].Color = polygonColor; vertices[i].X = xyzVector.X; vertices[i].Y = xyzVector.Y; vertices[i].Z = xyzVector.Z; } primList.Add(vertices); }
private void finishTesselation(Point3d[] tesselatorList) { int alpha = (int)(((double)m_polygonColor.A / 255 * (double)this.Opacity / 255) * 255); int polygonColor = System.Drawing.Color.FromArgb(alpha, m_polygonColor.R, m_polygonColor.G, m_polygonColor.B).ToArgb(); CustomVertex.PositionNormalColored[] vertices = new CustomVertex.PositionNormalColored[tesselatorList.Length]; // precalculate feature center (at zero elev) Point3d center = new Point3d(0, 0, 0); for (int i = 0; i < m_outerRing.Points.Length; i++) { center += MathEngine.SphericalToCartesianD( Angle.FromDegrees(m_outerRing.Points[i].Y), Angle.FromDegrees(m_outerRing.Points[i].X), World.EquatorialRadius ); } center = center * (1.0 / m_outerRing.Points.Length); // round off to nearest 10^5. center.X = ((int)(center.X / 10000.0)) * 10000.0; center.Y = ((int)(center.Y / 10000.0)) * 10000.0; center.Z = ((int)(center.Z / 10000.0)) * 10000.0; m_localOrigin = center.Vector3; for (int i = 0; i < vertices.Length; i++) { Point3d sphericalPoint = tesselatorList[i]; //System.Console.WriteLine("Point" + sphericalPoint.X+" "+sphericalPoint.Y+" "+sphericalPoint.Z); double terrainHeight = 0; if (m_altitudeMode == AltitudeMode.RelativeToGround) { if (World.TerrainAccessor != null) { terrainHeight = World.TerrainAccessor.GetElevationAt( sphericalPoint.Y, sphericalPoint.X, (100.0 / DrawArgs.Camera.ViewRange.Degrees) ); } } Point3d xyzPoint = MathEngine.SphericalToCartesianD( Angle.FromDegrees(sphericalPoint.Y), Angle.FromDegrees(sphericalPoint.X), World.EquatorialRadius + m_verticalExaggeration * (m_geographicBoundingBox.MaximumAltitude + m_distanceAboveSurface + terrainHeight)); //Vector3 xyzVector = (xyzPoint + center).Vector3; vertices[i].Color = polygonColor; vertices[i].X = (float)(xyzPoint.X - center.X); vertices[i].Y = (float)(xyzPoint.Y - center.Y); vertices[i].Z = (float)(xyzPoint.Z - center.Z); vertices[i].Nx = 0; vertices[i].Ny = 0; vertices[i].Nz = 0; } primList.Add(vertices); ComputeNormals((PrimitiveType)primTypes[primList.Count - 1], vertices); }