Skip to content

Commit

Permalink
Add computeLevelDenominator.
Browse files Browse the repository at this point in the history
  • Loading branch information
kring committed Nov 8, 2023
1 parent 75f545b commit 5def156
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,19 @@ class ImplicitTilingUtilities {
static CesiumGeospatial::S2CellBoundingVolume computeBoundingVolume(
const CesiumGeospatial::S2CellBoundingVolume& rootBoundingVolume,
const CesiumGeometry::QuadtreeTileID& tileID) noexcept;

/**
* @brief Computes the denominator for a given implicit tile level.
*
* Divide the root tile's geometric error by this value to get the standard
* geometric error for tiles on the level. Or divide each component of a
* bounding volume by this factor to get the size of the bounding volume along
* that axis for tiles of this level.
*
* @param level The tile level.
* @return The denominator for the level.
*/
static double computeLevelDenominator(uint32_t level) noexcept;
};

} // namespace Cesium3DTilesContent
13 changes: 9 additions & 4 deletions Cesium3DTilesContent/src/ImplicitTilingUtilities.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ CesiumGeospatial::GlobeRectangle subdivideRectangle(
CesiumGeospatial::BoundingRegion ImplicitTilingUtilities::computeBoundingVolume(
const CesiumGeospatial::BoundingRegion& rootBoundingVolume,
const CesiumGeometry::QuadtreeTileID& tileID) noexcept {
double denominator = static_cast<double>(1 << tileID.level);
double denominator = computeLevelDenominator(tileID.level);
return CesiumGeospatial::BoundingRegion{
subdivideRectangle(
rootBoundingVolume.getRectangle(),
Expand All @@ -169,7 +169,7 @@ CesiumGeospatial::BoundingRegion ImplicitTilingUtilities::computeBoundingVolume(
CesiumGeospatial::BoundingRegion ImplicitTilingUtilities::computeBoundingVolume(
const CesiumGeospatial::BoundingRegion& rootBoundingVolume,
const CesiumGeometry::OctreeTileID& tileID) noexcept {
double denominator = static_cast<double>(1 << tileID.level);
double denominator = computeLevelDenominator(tileID.level);
double heightSize = (rootBoundingVolume.getMaximumHeight() -
rootBoundingVolume.getMinimumHeight()) /
denominator;
Expand All @@ -195,7 +195,7 @@ ImplicitTilingUtilities::computeBoundingVolume(
const glm::dmat3& halfAxes = rootBoundingVolume.getHalfAxes();
const glm::dvec3& center = rootBoundingVolume.getCenter();

double denominator = static_cast<double>(1 << tileID.level);
double denominator = computeLevelDenominator(tileID.level);
glm::dvec3 min = center - halfAxes[0] - halfAxes[1] - halfAxes[2];

glm::dvec3 xDim = halfAxes[0] * 2.0 / denominator;
Expand All @@ -216,7 +216,7 @@ ImplicitTilingUtilities::computeBoundingVolume(
const glm::dmat3& halfAxes = rootBoundingVolume.getHalfAxes();
const glm::dvec3& center = rootBoundingVolume.getCenter();

double denominator = static_cast<double>(1 << tileID.level);
double denominator = computeLevelDenominator(tileID.level);
glm::dvec3 min = center - halfAxes[0] - halfAxes[1] - halfAxes[2];

glm::dvec3 xDim = halfAxes[0] * 2.0 / denominator;
Expand Down Expand Up @@ -245,6 +245,11 @@ ImplicitTilingUtilities::computeBoundingVolume(
rootBoundingVolume.getMaximumHeight());
}

double
ImplicitTilingUtilities::computeLevelDenominator(uint32_t level) noexcept {
return static_cast<double>(1 << level);
}

QuadtreeChildren::iterator::iterator(
const CesiumGeometry::QuadtreeTileID& parentTileID,
bool isEnd) noexcept
Expand Down

0 comments on commit 5def156

Please sign in to comment.