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);
        }
Beispiel #2
0
        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);
        }