#pragma once #include "ITilesetHeightSampler.h" #include #include namespace Cesium3DTilesSelection { /** * @brief A loader that will generate a tileset by tesselating the surface of an * ellipsoid, producing a simple globe tileset without any terrain features. */ class EllipsoidTilesetLoader : public TilesetContentLoader, public ITilesetHeightSampler { public: /** * @brief Constructs a new instance. * * @param ellipsoid The {@link CesiumGeospatial::Ellipsoid}. */ EllipsoidTilesetLoader( const CesiumGeospatial::Ellipsoid& ellipsoid CESIUM_DEFAULT_ELLIPSOID); /** * @brief Creates a new tileset with this loader. * * @param externals The external interfaces to use. * @param options Additional options for the tileset. */ static std::unique_ptr createTileset( const TilesetExternals& externals, const TilesetOptions& options = TilesetOptions{}); CesiumAsync::Future loadTileContent(const TileLoadInput& input) override; TileChildrenResult createTileChildren( const Tile& tile, const CesiumGeospatial::Ellipsoid& ellipsoid CESIUM_DEFAULT_ELLIPSOID) override; ITilesetHeightSampler* getHeightSampler() override; CesiumAsync::Future sampleHeights( const CesiumAsync::AsyncSystem& asyncSystem, std::vector&& positions) override; private: struct Geometry { std::vector indices; std::vector vertices; std::vector normals; }; void createChildTile( const Tile& parent, std::vector& children, const CesiumGeometry::QuadtreeTileID& childID) const; CesiumGeospatial::BoundingRegion createBoundingRegion(const CesiumGeometry::QuadtreeTileID& quadtreeID) const; Geometry createGeometry(const Tile& tile) const; CesiumGltf::Model createModel(const Geometry& geometry) const; CesiumGeospatial::GeographicProjection _projection; CesiumGeometry::QuadtreeTilingScheme _tilingScheme; }; } // namespace Cesium3DTilesSelection