Exemple #1
0
        /// <summary>
        /// Select terrain elevation blocks from the terrain database.
        /// </summary>
        /// <param name="area">
        /// The <see cref="GeoTreeArea"/> that the returned items must intersect.
        /// </param>
        /// <returns>
        /// It returns a <see cref="ICollection{ITerrainBlock}"/> that intersect <paramref name="area"/>.
        /// </returns>
        public static ICollection <ITerrainBlock> SelectElevationBlocks(GeoTreeArea area)
        {
            List <ITerrainBlock> blocks = new List <ITerrainBlock>();

            foreach (ITerrainBlock block in _GeoElevationTree.Select(area))
            {
                blocks.Add(block);
            }

            return(blocks);
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="geoArea">
        ///
        /// </param>
        /// <param name="precision">
        ///
        /// </param>
        private void CreateElevationTextures(GeoTreeArea geoArea, Vertex2d precision)
        {
            foreach (Terrain.ITerrainBlock terrainBlock in Terrain.SelectElevationBlocks(geoArea))
            {
                ElevationTexture elevationTexture;

                // COllect texture if not defined yet
                if (_ElevationTextures.TryGetValue(terrainBlock.Id, out elevationTexture))
                {
                    elevationTexture = new ElevationTexture(terrainBlock);
                    LinkResource(elevationTexture);

                    _ElevationTextures.Add(terrainBlock.Id, elevationTexture);
                }

                // Do not dispose texture
                elevationTexture.UpdateTime = DateTime.UtcNow;

                // Determine which LOD need to be present
                uint lod = 0;

                for (double lodPrecision = terrainBlock.TextelPrecision; precision.x > lodPrecision; lodPrecision /= 2.0, lod++)
                {
                    ;
                }

                // Mipmap already loaded?
                if (_ElevationTexture.HasMipMapLevel(lod))
                {
                    continue;
                }

                // Load mipmap
                elevationTexture.Create(lod);
            }
        }