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