初始提交: UE5.3项目基础框架
This commit is contained in:
112
Plugins/CesiumForUnreal/Source/ThirdParty/include/CesiumGeospatial/EllipsoidTangentPlane.h
vendored
Normal file
112
Plugins/CesiumForUnreal/Source/ThirdParty/include/CesiumGeospatial/EllipsoidTangentPlane.h
vendored
Normal file
@ -0,0 +1,112 @@
|
||||
#pragma once
|
||||
|
||||
#include "Ellipsoid.h"
|
||||
#include "Library.h"
|
||||
|
||||
#include <CesiumGeometry/Plane.h>
|
||||
|
||||
#include <glm/fwd.hpp>
|
||||
#include <glm/vec2.hpp>
|
||||
#include <glm/vec3.hpp>
|
||||
|
||||
namespace CesiumGeospatial {
|
||||
|
||||
/**
|
||||
* @brief A plane tangent to an {@link Ellipsoid} at a certain origin position.
|
||||
*
|
||||
* If the origin is not on the surface of the ellipsoid, its surface projection
|
||||
* will be used.
|
||||
*/
|
||||
class CESIUMGEOSPATIAL_API EllipsoidTangentPlane final {
|
||||
public:
|
||||
/**
|
||||
* @brief Creates a new instance.
|
||||
*
|
||||
* @param origin The origin, in cartesian coordinates.
|
||||
* @param ellipsoid The ellipsoid. Default value: {@link Ellipsoid::WGS84}.
|
||||
* @throws An `std::invalid_argument` if the given origin is at the
|
||||
* center of the ellipsoid.
|
||||
*/
|
||||
EllipsoidTangentPlane(
|
||||
const glm::dvec3& origin,
|
||||
const Ellipsoid& ellipsoid CESIUM_DEFAULT_ELLIPSOID);
|
||||
|
||||
/**
|
||||
* @brief Creates a new instance.
|
||||
*
|
||||
* @param eastNorthUpToFixedFrame A transform that was computed with
|
||||
* {@link GlobeTransforms::eastNorthUpToFixedFrame}.
|
||||
* @param ellipsoid The ellipsoid. Default value: {@link Ellipsoid::WGS84}.
|
||||
*/
|
||||
EllipsoidTangentPlane(
|
||||
const glm::dmat4& eastNorthUpToFixedFrame,
|
||||
const Ellipsoid& ellipsoid CESIUM_DEFAULT_ELLIPSOID);
|
||||
|
||||
/**
|
||||
* @brief Returns the {@link Ellipsoid}.
|
||||
*/
|
||||
const Ellipsoid& getEllipsoid() const noexcept { return this->_ellipsoid; }
|
||||
|
||||
/**
|
||||
* @brief Returns the origin, in cartesian coordinates.
|
||||
*/
|
||||
const glm::dvec3& getOrigin() const noexcept { return this->_origin; }
|
||||
|
||||
/**
|
||||
* @brief Returns the x-axis of this plane.
|
||||
*/
|
||||
const glm::dvec3& getXAxis() const noexcept { return this->_xAxis; }
|
||||
|
||||
/**
|
||||
* @brief Returns the y-axis of this plane.
|
||||
*/
|
||||
const glm::dvec3& getYAxis() const noexcept { return this->_yAxis; }
|
||||
|
||||
/**
|
||||
* @brief Returns the z-axis (i.e. the normal) of this plane.
|
||||
*/
|
||||
const glm::dvec3& getZAxis() const noexcept {
|
||||
return this->_plane.getNormal();
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Returns a {@link CesiumGeometry::Plane} representation of this
|
||||
* plane.
|
||||
*/
|
||||
const CesiumGeometry::Plane& getPlane() const noexcept {
|
||||
return this->_plane;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Computes the position of the projection of the given point on this
|
||||
* plane.
|
||||
*
|
||||
* Projects the given point on this plane, along the normal. The result will
|
||||
* be a 2D point, referring to the local coordinate system of the plane that
|
||||
* is given by the x- and y-axis.
|
||||
*
|
||||
* @param cartesian The point in cartesian coordinates.
|
||||
* @return The 2D representation of the point on the plane that is closest to
|
||||
* the given position.
|
||||
*/
|
||||
glm::dvec2
|
||||
projectPointToNearestOnPlane(const glm::dvec3& cartesian) const noexcept;
|
||||
|
||||
private:
|
||||
/**
|
||||
* Computes the matrix that is used for the constructor (if the origin
|
||||
* and ellipsoid are given), but throws an `std::invalid_argument` if
|
||||
* the origin is at the center of the ellipsoid.
|
||||
*/
|
||||
static glm::dmat4 computeEastNorthUpToFixedFrame(
|
||||
const glm::dvec3& origin,
|
||||
const Ellipsoid& ellipsoid CESIUM_DEFAULT_ELLIPSOID);
|
||||
|
||||
Ellipsoid _ellipsoid;
|
||||
glm::dvec3 _origin;
|
||||
glm::dvec3 _xAxis;
|
||||
glm::dvec3 _yAxis;
|
||||
CesiumGeometry::Plane _plane;
|
||||
};
|
||||
|
||||
} // namespace CesiumGeospatial
|
||||
Reference in New Issue
Block a user