初始提交: UE5.3项目基础框架

This commit is contained in:
2025-10-14 11:14:54 +08:00
commit 721d9fd98e
5334 changed files with 316782 additions and 0 deletions

View File

@ -0,0 +1,116 @@
#pragma once
#include "Library.h"
#include <cstdint>
#include <functional>
namespace CesiumGeometry {
class QuadtreeTilingScheme;
/**
* @brief Uniquely identifies a node in a quadtree.
*
* This is one form of a {@link Cesium3DTilesSelection::TileID}.
*
* The identifier is composed of the level (with 0 being the level of the root
* tile), the x- and y-coordinate of the tile, referring to a grid coordinate
* system at the respective level.
*/
struct CESIUMGEOMETRY_API QuadtreeTileID final {
/**
* @brief Creates a new instance.
*
* @param level_ The level of the node, with 0 being the root
* @param x_ The x-coordinate of the tile
* @param y_ The y-coordinate of the tile
*/
constexpr QuadtreeTileID(uint32_t level_, uint32_t x_, uint32_t y_) noexcept
: level(level_), x(x_), y(y_) {}
/**
* @brief Returns `true` if two identifiers are equal.
*/
constexpr bool operator==(const QuadtreeTileID& other) const noexcept {
return this->level == other.level && this->x == other.x &&
this->y == other.y;
}
/**
* @brief Returns `true` if two identifiers are *not* equal.
*/
constexpr bool operator!=(const QuadtreeTileID& other) const noexcept {
return !(*this == other);
}
/**
* @brief Computes the inverse y-coordinate of this tile ID.
*
* This will compute the inverse y-coordinate of this tile ID, based
* on the given tiling scheme, which provides the number of tiles
* in y-direction for the level of this tile ID.
*
* @param tilingScheme The {@link QuadtreeTilingScheme}.
* @return The inverted y-coordinate.
*/
uint32_t
computeInvertedY(const QuadtreeTilingScheme& tilingScheme) const noexcept;
/**
* @brief Gets the ID of the parent of the tile with this ID.
*
* If this method is called on a level zero tile, it returns itself.
*
* @return The ID of the parent tile.
*/
constexpr QuadtreeTileID getParent() const noexcept {
if (this->level == 0) {
return *this;
}
return QuadtreeTileID(this->level - 1, this->x >> 1, this->y >> 1);
}
/**
* @brief The level of this tile ID, with 0 being the root tile.
*/
uint32_t level;
/**
* @brief The x-coordinate of this tile ID.
*/
uint32_t x;
/**
* @brief The y-coordinate of this tile ID.
*/
uint32_t y;
};
/**
* @brief A node of a tile hierarchy that was created by upsampling the tile
* content of a parent node.
*/
struct CESIUMGEOMETRY_API UpsampledQuadtreeNode final {
/**
* @brief The {@link QuadtreeTileID} for this tree node.
*/
QuadtreeTileID tileID;
};
} // namespace CesiumGeometry
namespace std {
/**
* @brief A hash function for {@link CesiumGeometry::QuadtreeTileID} objects.
*/
template <> struct hash<CesiumGeometry::QuadtreeTileID> {
/**
* @brief A specialization of the `std::hash` template for
* {@link CesiumGeometry::QuadtreeTileID} objects.
*/
size_t operator()(const CesiumGeometry::QuadtreeTileID& key) const noexcept;
};
} // namespace std