CrystalSpace

Public API Reference

Main Page | Modules | Class Hierarchy | Alphabetical List | Class List | File List | Class Members | File Members | Related Pages

csIntersect3 Class Reference
[Geometry utilities]

Some functions to perform various intersection calculations with 3D line segments. More...

#include <csgeom/math3d.h>

List of all members.

Static Public Member Functions

bool PlanePolygon (const csPlane3 &plane, csPoly3D *poly, csSegment3 &segment)
 Intersect a plane with a 3D polygon and return the line segment corresponding with this intersection.
int SegmentFrustum (csPlane3 *planes, int num_planes, csSegment3 &seg)
 Intersect a segment with a frustum (given as a set of planes).
bool SegmentTriangle (const csSegment3 &seg, const csVector3 &tr1, const csVector3 &tr2, const csVector3 &tr3, csVector3 &isect)
 Intersect a 3D segment with a triangle.
bool SegmentPolygon (const csSegment3 &seg, const csPoly3D &poly, const csPlane3 &poly_plane, csVector3 &isect)
 Intersect a 3D segment with a polygon.
bool SegmentPlanes (const csVector3 &u, const csVector3 &v, const csPlane3 *planes, int length, csVector3 &isect, float &dist)
 If a number of planes enclose a convex space (with their normals pointing outwards).
bool SegmentPlane (const csVector3 &u, const csVector3 &v, const csVector3 &normal, const csVector3 &a, csVector3 &isect, float &dist)
 Intersect a 3D segment with a plane.
bool SegmentPlane (const csVector3 &u, const csVector3 &v, const csPlane3 &p, csVector3 &isect, float &dist)
 Intersect a 3D segment with a plane.
bool ThreePlanes (const csPlane3 &p1, const csPlane3 &p2, const csPlane3 &p3, csVector3 &isect)
 Intersect 3 planes to get the point that is part of all three planes.
bool PlaneXPlane (const csPlane3 &p1, float x2, csPlane2 &isect)
 Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.
bool PlaneYPlane (const csPlane3 &p1, float y2, csPlane2 &isect)
 Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.
bool PlaneZPlane (const csPlane3 &p1, float z2, csPlane2 &isect)
 Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.
bool PlaneAxisPlane (const csPlane3 &p1, int nr, float pos, csPlane2 &isect)
 Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.
float SegmentZ0Plane (const csVector3 &v1, const csVector3 &v2, csVector3 &isect)
 Intersect a 3D segment with the z = 0 plane.
float SegmentZ0Plane (const csSegment3 &uv, csVector3 &isect)
 Intersect a 3D segment with the z = 0 plane.
float SegmentXPlane (const csVector3 &u, const csVector3 &v, float xval, csVector3 &isect)
 Intersect a 3D segment with the plane x = xval.
float SegmentXPlane (const csSegment3 &uv, float xval, csVector3 &isect)
 Intersect a 3D segment with the plane x = xval.
float SegmentYPlane (const csVector3 &u, const csVector3 &v, float yval, csVector3 &isect)
 Intersect a 3D segment with the plane y = yval.
float SegmentYPlane (const csSegment3 &uv, float yval, csVector3 &isect)
 Intersect a 3D segment with the plane y = yval.
float SegmentZPlane (const csVector3 &u, const csVector3 &v, float zval, csVector3 &isect)
 Intersect a 3D segment with the plane z = zval.
float SegmentZPlane (const csSegment3 &uv, float zval, csVector3 &isect)
 Intersect a 3D segment with the plane z = zval.
float SegmentAxisPlane (const csVector3 &u, const csVector3 &v, int nr, float pos, csVector3 &isect)
 Intersect a 3D segment with an axis aligned plane and return the intersection (fails if segment is parallel to the plane), and returns the distance from u to the intersection point.
float SegmentXFrustum (const csVector3 &u, const csVector3 &v, float A, csVector3 &isect)
 Intersect a 3D segment with the frustum plane Ax + z = 0.
float SegmentXFrustum (const csSegment3 &uv, float A, csVector3 &isect)
 Intersect a 3D segment with the frustum plane Ax + z = 0.
float SegmentYFrustum (const csVector3 &u, const csVector3 &v, float B, csVector3 &isect)
 Intersect a 3D segment with the frustum plane By + z = 0.
float SegmentYFrustum (const csSegment3 &uv, float B, csVector3 &isect)
 Intersect a 3D segment with the frustum plane By + z = 0.
int BoxSegment (const csBox3 &box, const csSegment3 &segment, csVector3 &isect, float *pr=0)
 Intersect a segment with a box and returns one of CS_BOX_SIDE_...
bool BoxFrustum (const csBox3 &box, csPlane3 *frustum, uint32 inClipMask, uint32 &outClipMask)
 Intersect an AABB with a frustum.
bool BoxSphere (const csBox3 &box, const csVector3 &center, float sqradius)
 Test if a box intersects with a sphere.
bool BoxPlane (const csBox3 &box, const csPlane3 &plane)
 Test if a plane intersects with a box.
bool BoxPlane (const csBox3 &box, const csVector3 &normal, const csVector3 &vert)
 Test if a plane intersects with a box.
bool BoxTriangle (const csBox3 &box, const csVector3 &tri0, const csVector3 &tri1, const csVector3 &tri2)
 Test if a triangle intersects with a box.
bool BoxBox (const csBox3 &box1, const csBox3 &box2)
 Test if two boxes intersect.
csPtr< csFrustumFrustumFrustum (const csFrustum &f1, const csFrustum &f2)
 Calculate intersection of two frustums.
csPtr< csFrustumFrustumFrustum (const csFrustum &f1, csVector3 *poly, int num)
 Calculate intersection of two frustums.


Detailed Description

Some functions to perform various intersection calculations with 3D line segments.

This is a static class and contains only static member functions.

Definition at line 271 of file math3d.h.


Member Function Documentation

bool csIntersect3::BoxBox const csBox3 box1,
const csBox3 box2
[inline, static]
 

Test if two boxes intersect.

Definition at line 619 of file math3d.h.

References csBox3::TestIntersect().

bool csIntersect3::BoxFrustum const csBox3 box,
csPlane3 frustum,
uint32  inClipMask,
uint32 outClipMask
[static]
 

Intersect an AABB with a frustum.

The frustum may contain up to 32 planes. Active planes are defined using the 'inClipMask'. It will return true if AABB is visible in frustum. If the AABB intersects with the frustum then 'outClipMask' will contain the mask for all planes intersecting with the AABB. This can be used as 'inClipMask' for subsequent frustum tests with children of the AABB (i.e. other AABB inside this AABB).

bool csIntersect3::BoxPlane const csBox3 box,
const csVector3 normal,
const csVector3 vert
[static]
 

Test if a plane intersects with a box.

'vert' is one point on the plane.

bool csIntersect3::BoxPlane const csBox3 box,
const csPlane3 plane
[static]
 

Test if a plane intersects with a box.

int csIntersect3::BoxSegment const csBox3 box,
const csSegment3 segment,
csVector3 isect,
float *  pr = 0
[static]
 

Intersect a segment with a box and returns one of CS_BOX_SIDE_...

if it intersects, CS_BOX_INSIDE if inside, or -1 otherwise. The intersection point is also returned. If 'pr' is given then a number between 0 and 1 is returned which corresponds to the position on the segment. If we were in the box this this function will return CS_BOX_INSIDE. In this case 'isect' will be set to the start of the segment and *pr to 0.

bool csIntersect3::BoxSphere const csBox3 box,
const csVector3 center,
float  sqradius
[static]
 

Test if a box intersects with a sphere.

The intersection is not computed. The sphere is given with squared radius.

bool csIntersect3::BoxTriangle const csBox3 box,
const csVector3 tri0,
const csVector3 tri1,
const csVector3 tri2
[static]
 

Test if a triangle intersects with a box.

csPtr<csFrustum> csIntersect3::FrustumFrustum const csFrustum f1,
csVector3 poly,
int  num
[inline, static]
 

Calculate intersection of two frustums.

Definition at line 636 of file math3d.h.

References csFrustum::Intersect().

csPtr<csFrustum> csIntersect3::FrustumFrustum const csFrustum f1,
const csFrustum f2
[inline, static]
 

Calculate intersection of two frustums.

Definition at line 627 of file math3d.h.

References csFrustum::Intersect().

bool csIntersect3::PlaneAxisPlane const csPlane3 p1,
int  nr,
float  pos,
csPlane2 isect
[inline, static]
 

Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.

This intersection is defined on the axis aligned plane. Returns false if there is no intersection.

Definition at line 405 of file math3d.h.

References PlaneXPlane(), PlaneYPlane(), and PlaneZPlane().

bool csIntersect3::PlanePolygon const csPlane3 plane,
csPoly3D poly,
csSegment3 segment
[static]
 

Intersect a plane with a 3D polygon and return the line segment corresponding with this intersection.

Returns true if there is an intersection. If false then 'segment' will not be valid.

bool csIntersect3::PlaneXPlane const csPlane3 p1,
float  x2,
csPlane2 isect
[static]
 

Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.

This intersection is defined on the axis aligned plane. Returns false if there is no intersection.

Referenced by PlaneAxisPlane().

bool csIntersect3::PlaneYPlane const csPlane3 p1,
float  y2,
csPlane2 isect
[static]
 

Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.

This intersection is defined on the axis aligned plane. Returns false if there is no intersection.

Referenced by PlaneAxisPlane().

bool csIntersect3::PlaneZPlane const csPlane3 p1,
float  z2,
csPlane2 isect
[static]
 

Intersect a regular plane and an axis aligned plane and return the intersection (line) as a 2D plane.

This intersection is defined on the axis aligned plane. Returns false if there is no intersection.

Referenced by PlaneAxisPlane().

float csIntersect3::SegmentAxisPlane const csVector3 u,
const csVector3 v,
int  nr,
float  pos,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with an axis aligned plane and return the intersection (fails if segment is parallel to the plane), and returns the distance from u to the intersection point.

The intersection point is returned in isect.

Definition at line 521 of file math3d.h.

References SegmentXPlane(), SegmentYPlane(), and SegmentZPlane().

int csIntersect3::SegmentFrustum csPlane3 planes,
int  num_planes,
csSegment3 seg
[static]
 

Intersect a segment with a frustum (given as a set of planes).

Returns the clipped segment (i.e. the part of the segment that is visible in the frustum). Returns -1 if the segment is entirely outside the frustum. Returns 0 if the segment is not modified and returns 1 otherwise. The input segment will be modified. @@ WARNING! This function may not work completely ok. It has only barely been tested and is now unused.

bool csIntersect3::SegmentPlane const csVector3 u,
const csVector3 v,
const csPlane3 p,
csVector3 isect,
float &  dist
[static]
 

Intersect a 3D segment with a plane.

Returns true if there is an intersection, with the intersection point returned in isect. The distance from u to the intersection point is returned in dist. The distance that is returned is a normalized distance with respect to the given input vector. i.e. a distance of 0.5 means that the intersection point is halfway u and v. There are two cases in which this method will return false:

  • If the plane and the segment are parallel, then 'dist' will be set equal to 0, and 'isect' equal to 'v'.
  • If the segment does not cross the plane (i.e. if 'dist'>1+epsilon or 'dist'<-epsilon, where epsilon is a very small value near to zero) then 'isect's value is (0, 0, 0).
    Remarks:
    'p' is the plane, expressed as: A x + B y + C z + D = 0 , where (A,B,C) is the normal vector of the plane. 'u' and 'v' are the start (U point) and the end (V point) of the segment. 'isect' is searched along the segment U + x (V - U); the unknown 'x' value is got by: x = [(A,B,C) * U + D ] / (A,B,C) * (U - V), where * is the dot product.

bool csIntersect3::SegmentPlane const csVector3 u,
const csVector3 v,
const csVector3 normal,
const csVector3 a,
csVector3 isect,
float &  dist
[static]
 

Intersect a 3D segment with a plane.

Returns true if there is an intersection, with the intersection point returned in isect.

bool csIntersect3::SegmentPlanes const csVector3 u,
const csVector3 v,
const csPlane3 planes,
int  length,
csVector3 isect,
float &  dist
[static]
 

If a number of planes enclose a convex space (with their normals pointing outwards).

This method returns true if they are intersected by a segment. isect contains the closest intersection point. dist contains the distance to that point (with distance between u and v being 1)

bool csIntersect3::SegmentPolygon const csSegment3 seg,
const csPoly3D poly,
const csPlane3 poly_plane,
csVector3 isect
[static]
 

Intersect a 3D segment with a polygon.

Returns true if there is an intersection. In that case the intersection point will be in 'isect'. Note that this function doesn't do backface culling.

bool csIntersect3::SegmentTriangle const csSegment3 seg,
const csVector3 tr1,
const csVector3 tr2,
const csVector3 tr3,
csVector3 isect
[static]
 

Intersect a 3D segment with a triangle.

Returns true if there is an intersection. In that case the intersection point will be in 'isect'.

float csIntersect3::SegmentXFrustum const csSegment3 uv,
float  A,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the frustum plane Ax + z = 0.

Assumes an intersection, and returns the intersection point in isect.

Definition at line 544 of file math3d.h.

References csSegment3::End(), SegmentXFrustum(), and csSegment3::Start().

float csIntersect3::SegmentXFrustum const csVector3 u,
const csVector3 v,
float  A,
csVector3 isect
[static]
 

Intersect a 3D segment with the frustum plane Ax + z = 0.

Assumes an intersection, and returns the intersection point in isect.

Referenced by SegmentXFrustum().

float csIntersect3::SegmentXPlane const csSegment3 uv,
float  xval,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the plane x = xval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Definition at line 457 of file math3d.h.

References csSegment3::End(), SegmentXPlane(), and csSegment3::Start().

float csIntersect3::SegmentXPlane const csVector3 u,
const csVector3 v,
float  xval,
csVector3 isect
[static]
 

Intersect a 3D segment with the plane x = xval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Referenced by SegmentAxisPlane(), and SegmentXPlane().

float csIntersect3::SegmentYFrustum const csSegment3 uv,
float  B,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the frustum plane By + z = 0.

Assumes an intersection, and returns the intersection point in isect.

Definition at line 561 of file math3d.h.

References csSegment3::End(), SegmentYFrustum(), and csSegment3::Start().

float csIntersect3::SegmentYFrustum const csVector3 u,
const csVector3 v,
float  B,
csVector3 isect
[static]
 

Intersect a 3D segment with the frustum plane By + z = 0.

Assumes an intersection, and returns the intersection point in isect.

Referenced by SegmentYFrustum().

float csIntersect3::SegmentYPlane const csSegment3 uv,
float  yval,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the plane y = yval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Definition at line 482 of file math3d.h.

References csSegment3::End(), SegmentYPlane(), and csSegment3::Start().

float csIntersect3::SegmentYPlane const csVector3 u,
const csVector3 v,
float  yval,
csVector3 isect
[static]
 

Intersect a 3D segment with the plane y = yval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Referenced by SegmentAxisPlane(), and SegmentYPlane().

float csIntersect3::SegmentZ0Plane const csSegment3 uv,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the z = 0 plane.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Definition at line 433 of file math3d.h.

References csSegment3::End(), SegmentZ0Plane(), and csSegment3::Start().

float csIntersect3::SegmentZ0Plane const csVector3 v1,
const csVector3 v2,
csVector3 isect
[static]
 

Intersect a 3D segment with the z = 0 plane.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Referenced by SegmentZ0Plane().

float csIntersect3::SegmentZPlane const csSegment3 uv,
float  zval,
csVector3 isect
[inline, static]
 

Intersect a 3D segment with the plane z = zval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Definition at line 507 of file math3d.h.

References csSegment3::End(), SegmentZPlane(), and csSegment3::Start().

float csIntersect3::SegmentZPlane const csVector3 u,
const csVector3 v,
float  zval,
csVector3 isect
[static]
 

Intersect a 3D segment with the plane z = zval.

Assumes that there is an intersection (fails if the segment is parallel to the plane), and returns the distance from u to the intersection point. The intersection point is returned in isect.

Referenced by SegmentAxisPlane(), and SegmentZPlane().

bool csIntersect3::ThreePlanes const csPlane3 p1,
const csPlane3 p2,
const csPlane3 p3,
csVector3 isect
[static]
 

Intersect 3 planes to get the point that is part of all three planes.

Returns true, if there is a single point that fits. If some planes are parallel, then it will return false.


The documentation for this class was generated from the following file:
Generated for Crystal Space by doxygen 1.3.9.1