Giga Geometry Implementation
This commit is contained in:
@@ -25,31 +25,23 @@ namespace J3ML::Geometry
|
||||
public:
|
||||
Vector3 minPoint;
|
||||
Vector3 maxPoint;
|
||||
|
||||
public:
|
||||
static int NumFaces() { return 6; }
|
||||
static int NumEdges() { return 12; }
|
||||
static int NumVertices() { return 8; }
|
||||
public:
|
||||
AABB();
|
||||
|
||||
AABB(const Vector3& min, const Vector3& max);
|
||||
|
||||
Vector3 HalfDiagonal() const { return HalfSize(); }
|
||||
|
||||
static int NumFaces() { return 6; }
|
||||
|
||||
static int NumEdges() { return 12; }
|
||||
|
||||
static int NumVertices() { return 8; }
|
||||
|
||||
static AABB FromCenterAndSize(const Vector3 ¢er, const Vector3 &size);
|
||||
|
||||
float MinX() const;
|
||||
|
||||
float MinY() const;
|
||||
|
||||
float MinZ() const;
|
||||
|
||||
float MaxX() const;
|
||||
|
||||
float MaxY() const;
|
||||
|
||||
float MaxZ() const;
|
||||
|
||||
/// Returns the smallest sphere that contains this AABB.
|
||||
@@ -79,8 +71,7 @@ namespace J3ML::Geometry
|
||||
Vector3 CornerPoint(int cornerIndex) const;
|
||||
|
||||
Vector3 ExtremePoint(const Vector3 &direction) const;
|
||||
|
||||
Vector3 ExtremePoint(const Vector3 &direction, float &projectionDistance);
|
||||
Vector3 ExtremePoint(const Vector3 &direction, float &projectionDistance) const;
|
||||
|
||||
Vector3 PointOnEdge(int edgeIndex, float u) const;
|
||||
|
||||
@@ -126,8 +117,11 @@ namespace J3ML::Geometry
|
||||
bool Intersects(const Frustum& frustum) const;
|
||||
bool Intersects(const Polyhedron& polyhedron) const;
|
||||
TriangleMesh Triangulate(int numFacesX, int numFacesY, int numFacesZ, bool ccwIsFrontFacing) const;
|
||||
|
||||
/// Finds the set intersection of this and the given AABB.
|
||||
/** @return This function returns the AABB that is contained in both this and the given AABB.
|
||||
@todo Add Intersection(OBB/Polyhedron). */
|
||||
AABB Intersection(const AABB& rhs) const;
|
||||
bool IntersectLineAABB(const Vector3& linePos, const Vector3& lineDir, float tNear, float tFar) const;
|
||||
|
||||
|
||||
void SetFrom(const Vector3 *pVector3, int i);
|
||||
@@ -154,6 +148,27 @@ namespace J3ML::Geometry
|
||||
void Enclose(const OBB &obb);
|
||||
|
||||
bool TestAxis(const Vector3& axis, const Vector3& v0, const Vector3& v1, const Vector3& v2) const;
|
||||
|
||||
bool Intersects(const LineSegment &lineSegment) const;
|
||||
/// Computes the intersection of a line, ray or line segment and an AABB.
|
||||
/** Based on "T. Kay, J. Kajiya. Ray Tracing Complex Scenes. SIGGRAPH 1986 vol 20, number 4. pp. 269-"
|
||||
http://www.siggraph.org/education/materials/HyperGraph/raytrace/rtinter3.htm
|
||||
@param linePos The starting position of the line.
|
||||
@param lineDir The direction of the line. This direction vector must be normalized!
|
||||
@param tNear [in, out] For the test, the input line is treated as a line segment. Pass in the signed distance
|
||||
from the line origin to the start of the line. For a Line-AABB test, -FLOAT_INF is typically passed here.
|
||||
For a Ray-AABB test, 0.0f should be inputted. If intersection occurs, the signed distance from line origin
|
||||
to the line entry point in the AABB is returned here.
|
||||
@param tFar [in, out] Pass in the signed distance from the line origin to the end of the line. For Line-AABB and
|
||||
Ray-AABB tests, pass in FLOAT_INF. For a LineSegment-AABB test, pass in the length of the line segment here.
|
||||
If intersection occurs, the signed distance from line origin to the line exit point in the AABB
|
||||
is returned here.
|
||||
@return True if an intersection occurs, false otherwise.
|
||||
@note This is a low level utility function. It may be more convenient to use one of the AABB::Intersects()
|
||||
functions instead.
|
||||
@see Intersects(). */
|
||||
bool IntersectLineAABB(const Vector3& linePos, const Vector3& lineDir, float tNear, float tFar) const;
|
||||
bool IntersectLineAABB_CPP(const Vector3 &linePos, const Vector3 &lineDir, float &tNear, float &tFar) const;
|
||||
};
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user