Beispiel #1
0
        public TerrainMesh(RenderSystem rs, int x, int y, int size)
            : base(TerrainMeshManager.Instance, GetHashString(x, y, size))
        {
            this.opBuffer = new FastList <RenderOperation>();

            this.terrEdgeSize = size;
            this.tileX        = x;
            this.tileY        = y;

            renderSystem = rs;
            factory      = rs.ObjectFactory;

            material          = new Material(rs);
            material.CullMode = CullMode.None;


            material.Ambient      = new Color4F(1, 0.5f, 0.5f, 0.5f);
            material.Diffuse      = new Color4F(1f, 1f, 1f, 1f);
            material.Specular     = new Color4F(0, 0, 0, 0);
            material.Power        = 1;
            material.PriorityHint = RenderPriority.Second;


            PlanetEarth.TileCoord2CoordNew(x, y, out tileCol, out tileLat);

            // 估算包围球
            {
                float radtc = MathEx.Degree2Radian(tileCol);
                float radtl = MathEx.Degree2Radian(tileLat);
                float rad5  = PlanetEarth.DefaultTileSpan * 0.5f;

                BoundingSphere.Center = PlanetEarth.GetPosition(radtc + rad5, radtl - rad5);
                BoundingSphere.Radius = MathEx.Root2 * PlanetEarth.GetTileHeight(rad5 * 2);

                if (ObjectSpaceChanged != null)
                {
                    ObjectSpaceChanged(Transformation, BoundingSphere);
                }
            }
        }
Beispiel #2
0
        public void Parse(ConfigurationSection sect)
        {
            float lng = sect.GetSingle("Longitude");
            float lat = sect.GetSingle("Latitude");

            lng = MathEx.Degree2Radian(lng);
            lat = MathEx.Degree2Radian(lat);

            float alt = TerrainData.Instance.QueryHeight(lng, lat);

            position = PlanetEarth.GetPosition(lng, lat);

            radius = sect.GetSingle("Radius");

            radius = PlanetEarth.GetTileHeight(MathEx.Degree2Radian(radius));

            string sfxName = sect["SFX"];

            sound          = SoundManager.Instance.MakeSoundObjcet(sfxName, null, radius);
            sound.Position = position;

            //probability = sect.GetSingle("Probability", 1);
        }