Kolizje
[Math Module]

Functions

float common::Orient2D (const VEC2 &a, const VEC2 &b, const VEC2 &c)
 Funkcja wielofunkcyjna.
float common::Orient3D (const VEC3 &a, const VEC3 &b, const VEC3 &c, const VEC3 &d)
 Funkcja wielofunkcyjna.
bool common::PointInCircle (const VEC2 &pt, const VEC2 &circleCenter, float circleRadius)
bool common::PointInTriangle (const VEC2 &p, const VEC2 &a, const VEC2 &b, const VEC2 &c)
 Zwraca true, jeśli punkt p należy do trójkąta abc.
bool common::IsQuadConvex (const VEC2 &a, const VEC2 &b, const VEC2 &c, const VEC2 &d)
 Zwraca true, jeśli podany czworokąt jest wypukły.
bool common::IsQuadConvex (const VEC3 &a, const VEC3 &b, const VEC3 &c, const VEC3 &d)
 Zwraca true, jeśli podany czworokąt jest wypukły (nie zdegenerowany, nie wklęsły, nie samoprzecinający się).
float common::ClosestPointOnLine (const VEC3 &p, const VEC3 &RayOrig, const VEC3 &RayDir)
 Dany punkt p i promień (RayOrig, RayDir), oblicza parametr t dla punktu na tym promieniu będącego rzutem tego punktu na ten promień.
float common::ClosestPointSegmentSegment (const VEC3 &Seg1_Beg, const VEC3 &Seg1_End, const VEC3 &Seg2_Beg, const VEC3 &Seg2_End, float &OutSeg1_t, float &OutSeg2_t, VEC3 &OutSeg1_pt, VEC3 &OutSeg2_pt)
 Oblicza najbliższe sobie punkty na dwóch odcinkach.
float common::PointToLineDistanceSq (const VEC2 &P, const VEC2 &LineOrig, const VEC2 &LineDir)
 Zwraca kwadrat odległości punktu od prostej.
float common::PointToLineDistanceSq (const VEC3 &P, const VEC3 &LineOrig, const VEC3 &LineDir)
float common::PointToSegmentDistanceSq (const VEC2 &p, const VEC2 &segment_p1, const VEC2 &segment_p2)
 Zwraca kwadrat odległości punktu od odcinka.
float common::PointToSegmentDistanceSq (const VEC3 &p, const VEC3 &segment_p1, const VEC3 &segment_p2)
 Zwraca kwadrat odległości punktu od odcinka.
bool common::PointOnLine (const VEC3 &P, const VEC3 &LineOrig, const VEC3 &LineDir)
 Zwraca true, jeśli punkt leży na prostej.
float common::PointToLine (const VEC3 &P, const VEC3 &LineOrig, const VEC3 &LineDir)
 Zwraca parametr T punktu leżącego na prostej.
bool common::PointInLineSegment (const VEC3 &P, const VEC3 &SegmentBeg, const VEC3 &SegmentEnd)
 Zwraca true, jeśli punkt leży na odcinku.
float common::ClosestPointOnSegment (VEC2 *Out, const VEC2 &p, const VEC2 &p1, const VEC2 &p2)
 Wyznacza najbliższy punkt leżący na odcinku p1-p2 względem punktu p.
float common::ClosestPointOnSegment (VEC3 *Out, const VEC3 &p, const VEC3 &p1, const VEC3 &p2)
float common::ClosestPointOnRay (VEC2 *Out, const VEC2 &p, const VEC2 &RayOrig, const VEC2 &RayDir)
 Wyznacza najbliższy punkt leżący na półprostej względem punktu p.
float common::ClosestPointOnRay (VEC3 *Out, const VEC3 &p, const VEC3 &RayOrig, const VEC3 &RayDir)
void common::ClosestPointInBox (VEC3 *Out, const BOX &Box, const VEC3 &p)
 Wyznacza najbliższy punkt wewnątrz prostopadłościanu względem punktu p.
void common::ClosestPointInObb (VEC3 *OutPoint, const VEC3 &Point, const OBB &Obb)
 Znajduje punkt OutPoint należący do podanego OBB, najbliższy do punktu Point.
void common::ClosestPointInRect3d (VEC3 *OutPoint, const VEC3 &Point, const RECT3D &Rect3d)
 Znajduje punkt OutPoint należący do podanego prostokąta 3D, najbliższy do punktu Point.
void common::ClosestPointInRect3d (VEC3 *OutPoint, const VEC3 &p, const VEC3 &a, const VEC3 &b, const VEC3 &c)
 Znajduje punkt OutPoint należący do podanego prostokąta 3D wyznaczonego przez trzy wierzchołki: a, b, c, najbliższy do punktu Point.
void common::ClosestPointInTriangle (VEC3 *OutPoint, const VEC3 &p, const VEC3 &a, const VEC3 &b, const VEC3 &c)
 Znajduje punkt OutPoint należący do trójkąta (a, b, c) najbliższy do punktu p.
void common::ClosestPointInTriangle (VEC2 *out, const VEC2 &pt, const VEC2 &triA, const VEC2 &triB, const VEC2 &triC)
void common::ClosestPointInTetrahedron (VEC3 *OutPoint, const VEC3 &p, const VEC3 &a, const VEC3 &b, const VEC3 &c, const VEC3 &d)
 Znajduje punkt OutPoint należący do podanego czworościanu wyznaczonego przez wierzchołki: a, b, c, d, najbliższy do punktu p.
float common::PointToRectDistanceSq (const VEC2 &p, const RECTF &rect)
 Returns squared distance from point to rectangle. Returns 0 if point inside rectangle.
float common::PointToRectManhattanDistance (const VEC2 &p, const RECTF &rect)
float common::PointToRectMaxDistance (const VEC2 &p, const RECTF &rect)
float common::PointToBoxDistanceSq (const VEC3 &p, const BOX &box)
 Kwadrat odległości punktu od prostopadłościanu.
float common::PointToBoxManhattanDistance (const VEC3 &p, const BOX &box)
float common::PointToBoxMaxDistance (const VEC3 &p, const BOX &box)
float common::RectToRectDistanceSq (const RECTF &rect1, const RECTF &rect2)
 Returns squared distance between two rectangles. Returns 0 if given rectangles overlap.
float common::RectToRectManhattanDistance (const RECTF &rect1, const RECTF &rect2)
float common::RectToRectMaxDistance (const RECTF &rect1, const RECTF &rect2)
float common::BoxToBoxDistanceSq (const BOX &box1, const BOX &box2)
 Returns squared distance between two axis-aligned boxes. Returns 0 if given boxes overlap.
float common::BoxToBoxManhattanDistance (const BOX &box1, const BOX &box2)
float common::BoxToBoxMaxDistance (const BOX &box1, const BOX &box2)
float common::PointToObbDistanceSq (const VEC3 &Point, const OBB &Obb)
 Kwadrat odległości punktu od OBB.
bool common::CircleToRect (const VEC2 &circleCenter, float circleRadius, const RECTF &rect)
bool common::PointInSphere (const VEC3 &p, const VEC3 &SphereCenter, float SphereRadius)
 Zwraca true, jeśli podany punkt należy do sfery.
float common::PointToSphereDistance (const VEC3 &p, const VEC3 &SphereCenter, float SphereRadius)
 Zwraca odległość punktu od powierzchni sfery.
void common::ClosestPointOnSphere (VEC3 *Out, const VEC3 &SphereCenter, float SphereRadius, const VEC3 &p)
 Wyznacza najbliższy punkt na powierzchni sfery względem punktu p.
bool common::PointOnPlane (const VEC3 &p, const PLANE &plane)
 Zwraca true, jeśli podany punkt należy do płaszczyzny.
void common::ClosestPointOnPlane (VEC3 *Out, const PLANE &Plane, const VEC3 &p)
 Wyznacza najbliższy punkt na płaszczyźnie względem punktu p.
bool common::PointInTriangle (const VEC3 &point, const VEC3 &pa, const VEC3 &pb, const VEC3 &pc)
 Zwraca true, jeśli punkt należy do trójkąta.
bool common::PointInFrustum (const VEC3 &p, const FRUSTUM_PLANES &Frustum)
 Zwraca true, jeśli punkt należy do wnętrza podanego frustuma.
bool common::PointInFrustum (const VEC3 &p, const FRUSTUM_RADAR &Frustum)
bool common::ClosestPointsOnLines (float *OutT1, float *OutT2, const VEC3 &RayOrig1, const VEC3 &RayDir1, const VEC3 &RayOrig2, const VEC3 &RayDir2)
 Funkcja wyznacza parametry t1 i t2 dla punktów na dwóch prostych, w których te proste są najbliżej siebie.
bool common::RayToBox (float *OutT, const VEC3 &RayOrig, const VEC3 &RayDir, const BOX &Box)
 Kolizja promienia z prostopadłościanem.
bool common::RayToSphere (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 &SphereCenter, float SphereRadius, float *OutT)
 Wylicza kolizję promienia ze sferą.
bool common::RayToPlane (const VEC3 &RayOrig, const VEC3 &RayDir, const PLANE &Plane, float *OutT, float *OutVD)
 Przecięcie promienia z płaszczyzną.
bool common::RayToTriangle (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 &p0, const VEC3 &p1, const VEC3 &p2, bool BackfaceCulling, float *OutT)
 Kolizja promienia z trójkątem.
bool common::RayToQuad (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 QuadPoints[4], VEC3 *OutPoint=NULL)
 Kolizja promienia z czworokątem w 3D.
bool common::RayToFrustum (const VEC3 &RayOrig, const VEC3 &RayDir, const FRUSTUM_PLANES &Frustum, float *t_near, float *t_far)
 Kolizja promienia z frustumem.
bool common::RayToCylinder (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 &CylinderBeg, const VEC3 &CylinderEnd, float CylinderRadius, float *OutT)
 Kolizja promienia z dowolnie zorientowanym cylindrem.
bool common::PointInConvexPolyhedron (const VEC3 &Point, const PLANE PolyhedronPlanes[], size_t PolyhedronPlaneCount)
 Czy punkt leży wewnątrz wielościana wypukłego.
bool common::PointInConvexPolyhedron (const VEC3 &Point, const void *PolyhedronPlanes, size_t PolyhedronPlaneCount, int PolyhedronPlaneStride)
bool common::RayToConvexPolyhedron (const VEC3 &RayOrig, const VEC3 &RayDir, const PLANE PolyhedronPlanes[], size_t PolyhedronPlaneCount, float *OutBegT, float *OutEndT)
 Kolizja promienia z wielościanem wypukłym.
bool common::RayToConvexPolyhedron (const VEC3 &RayOrig, const VEC3 &RayDir, const void *PolyhedronPlanes, size_t PolyhedronPlaneCount, int PolyhedronPlaneStride, float *OutBegT, float *OutEndT)
bool common::SphereToBox (const VEC3 &SphereCenter, float SphereRadius, const BOX &Box)
 Zwraca true jeśli kula koliduje z prostopadłościanem (także jeśli jest w jego środku).
bool common::SphereToObb (const VEC3 &SphereCenter, float SphereRadius, const OBB &Obb)
 Zwraca true, jeśli sfera koliduje z prostopadłościanem zorientowanym.
bool common::SphereToTriangle (const VEC3 &SphereCenter, float SphereRadius, const VEC3 &TriA, const VEC3 &TriB, const VEC3 &TriC)
 Zwraca true, jeśli sfera koliduje z trójkątem.
bool common::SphereInBox (const VEC3 &SphereCenter, float SphereRadius, const BOX &Box)
 Zwraca true, jeśli sfera zawiera się w całości w prostopadłościanie.
bool common::BoxInSphere (const BOX &Box, const VEC3 &SphereCenter, float SphereRadius)
 Zwraca true, jeśli prostopadłościan zawiera się w całości w sferze.
int common::ClassifyBoxToPlane (const PLANE &plane, const BOX &box)
 Klasyfikuje położenie prostopadłościanu względem płaszczyzny.
int common::ClassifyObbToPlane (const PLANE &Plane, const OBB &Obb)
 Klasyfikuje położenie zorientowanego prostopadłościanu OBB względem płaszczyzny. Zwraca -1, 0, 1.
bool common::PlaneToBox (const PLANE &plane, const BOX &box)
 Kolizja płaszczyzny z prostopadłościanem.
bool common::TriangleInBox (const VEC3 &p1, const VEC3 &p2, const VEC3 &p3, const BOX &Box)
 Zwraca true, jeśli trójkąt zawiera się w prostopadłościanie.
bool common::TriangleToBox (const VEC3 &TriA, const VEC3 &TriB, const VEC3 &TriC, const BOX &Box)
 Zwraca true, jeśli trójkąt przecina prostopadłościan lub się w nim zawiera.
bool common::BoxToFrustum_Fast (const BOX &Box, const FRUSTUM_PLANES &Frustum)
 Zwraca true, jeśli podany prostopadłościan jest widoczny choć trochę w bryle widzenia.
bool common::BoxToFrustum (const BOX &Box, const FRUSTUM_PLANES &FrustumPlanes, const FRUSTUM_POINTS *OptFrustumPoints=NULL)
 Zwraca true, jeśli podany prostopadłościan jest widoczny choć trochę w bryle widzenia.
bool common::BoxToFrustum (const BOX &Box, const FRUSTUM_RADAR &Frustum)
bool common::BoxInFrustum (const BOX &Box, const FRUSTUM_PLANES &Frustum)
 Zwraca true, jeśli AABB jest w całości wewnątrz frustuma.
bool common::SphereToSphere (const VEC3 &Center1, float Radius1, const VEC3 &Center2, float Radius2)
 Zwraca true jeśli podane dwie sfery kolidują ze sobą.
bool common::SphereToPlane (const VEC3 &SphereCenter, float SphereRadius, const PLANE &Plane)
 Zwraca true, jeśli sfera koliduje z płaszczyzną.
int common::ClassifySphereToPlane (const VEC3 &SphereCenter, float SphereRadius, const PLANE &Plane)
 Klasyfikuje położenie sfery względem płaszczyzny.
bool common::CapsuleToPlane (const VEC3 &CapsuleBeg, const VEC3 &CapsuleEnd, float CapsuleRadius, const PLANE &Plane)
 Kolizja kapsuły (lub sfery poruszającej się od CapsuleBeg do CapsuleEnd) z płaszczyzną.
bool common::SphereToFrustum_Fast (const VEC3 &SphereCenter, float SphereRadius, const FRUSTUM_PLANES &Frustum)
 Zwraca true, jeśli sfera koliduje z frustumem.
bool common::SphereToFrustum (const VEC3 &SphereCenter, float SphereRadius, const FRUSTUM_PLANES &FrustumPlanes, const FRUSTUM_POINTS *OptFrustumPoints=NULL)
 Zwraca true, jeśli sfera koliduje z frustumem.
bool common::SphereToFrustum (const VEC3 &SphereCenter, float SphereRadius, const FRUSTUM_RADAR &Frustum)
 Testuje przecięcie sfery z frustumem.
bool common::SphereInFrustum (const VEC3 &SphereCenter, float SphereRadius, const FRUSTUM_PLANES &Frustum)
 Zwraca true, jeśli sfera zawiera się w całości wewnątrz frustuma.
bool common::Intersect2Planes (const PLANE &Plane1, const PLANE &Plane2, VEC3 *OutLineOrig, VEC3 *OutLineDir)
 Wylicza kolizję dwóch płaszczyzn zwracając parametry prostej tworzącej ich przecięcie.
bool common::Intersect3Planes (const PLANE &P1, const PLANE &P2, const PLANE &P3, VEC3 *OutP)
 Zwraca punkt przecięcia trzech płaszczyzn lub false, jeśli taki punkt nie istnieje.
bool common::PlaneToTriangle (const PLANE &Plane, const VEC3 &p0, const VEC3 &p1, const VEC3 &p2)
 Kolizja płaszczyzny z trójkątem.
int common::ClassifyPlaneToTriangle (const PLANE &Plane, const VEC3 &p0, const VEC3 &p1, const VEC3 &p2)
 Klasyfikuje położenie trójkąta względem płaszczyzny.
int common::ClassifyFrustumToPlane (const FRUSTUM_POINTS &Frustum, const PLANE &Plane)
 Kolizja płaszczyzny z frustumem (klasyfikacja).
bool common::SegmentToSegment (const VEC2 &Seg1_Beg, const VEC2 &Seg1_End, const VEC2 &Seg2_Beg, const VEC2 &Seg2_End, float *OutSeg1_t=NULL)
 Zwraca true, jeśli dwa odcinki 2D zachodzą na siebie.
bool common::TriangleToTriangle (const VEC3 &V0, const VEC3 &V1, const VEC3 &V2, const VEC3 &U0, const VEC3 &U1, const VEC3 &U2)
 Testuje kolizję dwóch trójkątów 3D.
bool common::TriangleInFrustum (const VEC3 &t1, const VEC3 &t2, const VEC3 &t3, const FRUSTUM_PLANES &Frustum)
 Testuje, czy trójkąt leży w całości wewnątrz frustuma.
bool common::TriangleToFrustum (const VEC3 &t1, const VEC3 &t2, const VEC3 &t3, const PLANE *OptTrianglePlane, const FRUSTUM_PLANES &FrustumPlanes, const FRUSTUM_POINTS *OptFrustumPoints)
 Testuje kolizję trójkąta z frustumem.
bool common::FrustumToFrustum (const FRUSTUM_PLANES &Frustum1_Planes, const FRUSTUM_POINTS &Frustum1_Points, const FRUSTUM_PLANES &Frustum2_Planes, const FRUSTUM_POINTS &Frustum2_Points)
 Testuje kolizję między dwoma frustumami.
bool common::SphereToCapsule (const VEC3 &SphereCenter, float SphereRadius, const VEC3 &Capsule_Beg, const VEC3 &Capsule_End, float Capsule_Radius)
 Kolizja sfery z kapsułą.
bool common::CapsuleToCapsule (const VEC3 &Capsule1_Beg, const VEC3 &Capsule1_End, float Capsule1_Radius, const VEC3 &Capsule2_Beg, const VEC3 &Capsule2_End, float Capsule2_Radius)
 Kolizja kapsuły z kapsułą.
bool common::PointInConvexPolygon (const VEC2 &Point, const VEC2 PolygonPoints[], size_t PolygonPointCount)
 Sprawdza, czy punkt leży wewnątrz wypukłego wielokąta 2D.
bool common::PointInConvexPolygon (const VEC2 &Point, const void *PolygonPoints, size_t PolygonPointCount, int PolygonPointStride)
bool common::PointInPolygon (const VEC2 &Point, const VEC2 PolygonPoints[], size_t PolygonPointCount)
 Zwraca true, jeśli podany punkt leży wewnątrz podanego wielokąta (2D).
bool common::PointInPolygon (const VEC2 &Point, const void *PolygonPoints, size_t PolygonPointCount, int PolygonPointStride)
bool common::RayToConvexPolygon (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 PolygonPoints[], size_t PolygonPointCount, bool BackfaceCulling, float *OutT, VEC3 *OutPoint, const PLANE *PolygonPlane=NULL)
 Zwraca true, jeśli promień przecina wielokąt wypukły 3D i wtedy przez OutT zwraca parametr dla promienia.
bool common::RayToConvexPolygon (const VEC3 &RayOrig, const VEC3 &RayDir, const void *PolygonPoints, size_t PolygonPointCount, int PolygonPointStride, bool BackfaceCulling, float *OutT, VEC3 *OutPoint, const PLANE *PolygonPlane=NULL)
bool common::RayToPolygon (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 PolygonPoints[], size_t PolygonPointCount, bool BackfaceCulling, float *OutT, VEC3 *OutPoint, const PLANE *PolygonPlane=NULL)
 Zwraca true, jeśli promień przecina wielokąt 3D i wtedy przez OutT zwraca parametr dla promienia.
bool common::RayToPolygon (const VEC3 &RayOrig, const VEC3 &RayDir, const void *PolygonPoints, size_t PolygonPointCount, int PolygonPointStride, bool BackfaceCulling, float *OutT, VEC3 *OutPoint, const PLANE *PolygonPlane=NULL)
bool common::SweptSphereToPlane (const VEC3 &SphereCenter, float SphereRadius, const VEC3 &SphereSweepDir, const PLANE &Plane, float *OutT0, float *OutT1)
 Liczy kolizję poruszającej się sfery z płaszczyzną.
bool common::SweptSphereToFrustum (const VEC3 &SphereCenter, float SphereRadius, const VEC3 &SphereSweepDir, const FRUSTUM_PLANES &Frustum)
 Oblicza kolizję poruszającej się sfery z frustumem.
bool common::SweptSphereToSphere (const VEC3 &SphereCenter1, float SphereRadius1, const VEC3 &SphereCenter2, float SphereRadius2, const VEC3 &SphereSweepDir1, float *OutT1, float *OutT2)
 Analityczna kolizja dwóch poruszających się sfer.
bool common::SweptBoxToBox (const BOX &Box1, const BOX &Box2, const VEC3 &SweepDirBox1, float *OutT1, float *OutT2)
 Kolizja poruszającego się AABB z drugim AABB.
int common::RayToCone (const VEC3 &rayOrig, const VEC3 &rayDir, const VEC3 &coneVertex, const VEC3 &coneDirVec, float coneHalfAngle, VEC3 intersections[2])
bool common::PointInCone (const VEC3 &pt, const VEC3 &coneVertex, const VEC3 &coneDirVec, float coneHalfAngle)
bool common::SegmentIntersectsOrIsContainedInCone (const VEC3 &segmentPoint1, const VEC3 &segmentPoint2, const VEC3 &coneVertex, const VEC3 &coneDirVec, const float coneHalfAngle, VEC3 intersections[2], int &numIntersectionsFound)
bool common::SegmentIntersectsOrIsContainedInCone (const VEC3 &segmentPoint1, const VEC3 &segmentPoint2, const VEC3 &coneVertex, const VEC3 &coneDirVec, const float coneHalfAngle)

Detailed Description


Function Documentation

bool common::BoxInFrustum ( const BOX &  Box,
const FRUSTUM_PLANES &  Frustum 
)

Zwraca true, jeśli AABB jest w całości wewnątrz frustuma.

bool common::BoxInSphere ( const BOX &  Box,
const VEC3 &  SphereCenter,
float  SphereRadius 
)

Zwraca true, jeśli prostopadłościan zawiera się w całości w sferze.

float common::BoxToBoxDistanceSq ( const BOX &  box1,
const BOX &  box2 
)

Returns squared distance between two axis-aligned boxes. Returns 0 if given boxes overlap.

float common::BoxToBoxManhattanDistance ( const BOX &  box1,
const BOX &  box2 
)
float common::BoxToBoxMaxDistance ( const BOX &  box1,
const BOX &  box2 
)
bool common::BoxToFrustum ( const BOX &  Box,
const FRUSTUM_RADAR &  Frustum 
)
bool common::BoxToFrustum ( const BOX &  Box,
const FRUSTUM_PLANES &  FrustumPlanes,
const FRUSTUM_POINTS *  OptFrustumPoints = NULL 
)

Zwraca true, jeśli podany prostopadłościan jest widoczny choć trochę w bryle widzenia.

Test dokładny, ale wolniejszy i wymaga też reprezentacji punktowej frustuma.

Parameters:
[in] OptFrustumPoints to parametr opcjonalny - podaj jeśli masz już wyliczony.
bool common::BoxToFrustum_Fast ( const BOX &  Box,
const FRUSTUM_PLANES &  Frustum 
)

Zwraca true, jeśli podany prostopadłościan jest widoczny choć trochę w bryle widzenia.

Uwaga! W rzadkich przypadkach może stwierdzić kolizję chociaż jej nie ma.

bool common::CapsuleToCapsule ( const VEC3 &  Capsule1_Beg,
const VEC3 &  Capsule1_End,
float  Capsule1_Radius,
const VEC3 &  Capsule2_Beg,
const VEC3 &  Capsule2_End,
float  Capsule2_Radius 
)

Kolizja kapsuły z kapsułą.

bool common::CapsuleToPlane ( const VEC3 &  CapsuleBeg,
const VEC3 &  CapsuleEnd,
float  CapsuleRadius,
const PLANE &  Plane 
)

Kolizja kapsuły (lub sfery poruszającej się od CapsuleBeg do CapsuleEnd) z płaszczyzną.

Parameters:
Plane Płaszczyzna musi być znormalizowana.
bool common::CircleToRect ( const VEC2 &  circleCenter,
float  circleRadius,
const RECTF &  rect 
)
int common::ClassifyBoxToPlane ( const PLANE &  plane,
const BOX &  box 
)

Klasyfikuje położenie prostopadłościanu względem płaszczyzny.

  • -1 = prostopadłościan w całości po ujemnej stronie płaszczyzny
  • 0 = prostopadłościan przecina płaszczyznę
  • +1 = prostopadłościan w całości po dodatniej stronie płaszczyzny
    Parameters:
    plane Płaszczyzna musi być znormalizowana
int common::ClassifyFrustumToPlane ( const FRUSTUM_POINTS &  Frustum,
const PLANE &  Plane 
)

Kolizja płaszczyzny z frustumem (klasyfikacja).

int common::ClassifyObbToPlane ( const PLANE &  Plane,
const OBB &  Obb 
)

Klasyfikuje położenie zorientowanego prostopadłościanu OBB względem płaszczyzny. Zwraca -1, 0, 1.

int common::ClassifyPlaneToTriangle ( const PLANE &  Plane,
const VEC3 &  p0,
const VEC3 &  p1,
const VEC3 &  p2 
)

Klasyfikuje położenie trójkąta względem płaszczyzny.

  • -1 = trójkąt w całości po ujemnej stronie płaszczyzny
  • 0 = trójkąt przecina płaszczyznę
  • +1 = trójkąt w całości po dodatniej stronie płaszczyzny
int common::ClassifySphereToPlane ( const VEC3 &  SphereCenter,
float  SphereRadius,
const PLANE &  Plane 
)

Klasyfikuje położenie sfery względem płaszczyzny.

  • -1 = sfera w całości po ujemnej stronie płaszczyzny
  • 0 = sfera przecina płaszczyznę
  • +1 = sfera w całości po dodatniej stronie płaszczyzny
void common::ClosestPointInBox ( VEC3 *  Out,
const BOX &  Box,
const VEC3 &  p 
)

Wyznacza najbliższy punkt wewnątrz prostopadłościanu względem punktu p.

Jeśli p leży wewnątrz tego prostopadłościanu, zwrócone zostaje dokładnie p.

void common::ClosestPointInObb ( VEC3 *  OutPoint,
const VEC3 &  Point,
const OBB &  Obb 
)

Znajduje punkt OutPoint należący do podanego OBB, najbliższy do punktu Point.

void common::ClosestPointInRect3d ( VEC3 *  OutPoint,
const VEC3 &  p,
const VEC3 &  a,
const VEC3 &  b,
const VEC3 &  c 
)

Znajduje punkt OutPoint należący do podanego prostokąta 3D wyznaczonego przez trzy wierzchołki: a, b, c, najbliższy do punktu Point.

void common::ClosestPointInRect3d ( VEC3 *  OutPoint,
const VEC3 &  Point,
const RECT3D &  Rect3d 
)

Znajduje punkt OutPoint należący do podanego prostokąta 3D, najbliższy do punktu Point.

void common::ClosestPointInTetrahedron ( VEC3 *  OutPoint,
const VEC3 &  p,
const VEC3 &  a,
const VEC3 &  b,
const VEC3 &  c,
const VEC3 &  d 
)

Znajduje punkt OutPoint należący do podanego czworościanu wyznaczonego przez wierzchołki: a, b, c, d, najbliższy do punktu p.

void common::ClosestPointInTriangle ( VEC2 *  out,
const VEC2 &  pt,
const VEC2 &  triA,
const VEC2 &  triB,
const VEC2 &  triC 
)

Znajduje punkt OutPoint należący do podanego prostokąta 3D wyznaczonego przez trzy wierzchołki: a, b, c, najbliższy do punktu Point.

void common::ClosestPointInTriangle ( VEC3 *  OutPoint,
const VEC3 &  p,
const VEC3 &  a,
const VEC3 &  b,
const VEC3 &  c 
)

Znajduje punkt OutPoint należący do trójkąta (a, b, c) najbliższy do punktu p.

float common::ClosestPointOnLine ( const VEC3 &  p,
const VEC3 &  RayOrig,
const VEC3 &  RayDir 
)

Dany punkt p i promień (RayOrig, RayDir), oblicza parametr t dla punktu na tym promieniu będącego rzutem tego punktu na ten promień.

W ten sposób można obliczyć rzut punktu na promień (punkt z promienia najbliższy danemu punktowi) jako RayOrig + RayDir*t. Można też policzyć najbliższy punkt na półprostej lub odcinku limitując najpierw t od 0 do 1 czy od 0 do dlugości odcinka. UWAGA! Jeśli RayDir nie jest jednostkowy, wynik trzeba podzielić przez LengthSq(RayDir).

void common::ClosestPointOnPlane ( VEC3 *  Out,
const PLANE &  Plane,
const VEC3 &  p 
)

Wyznacza najbliższy punkt na płaszczyźnie względem punktu p.

Płaszczyzna musi być znormalizowana.

float common::ClosestPointOnRay ( VEC3 *  Out,
const VEC3 &  p,
const VEC3 &  RayOrig,
const VEC3 &  RayDir 
)
float common::ClosestPointOnRay ( VEC2 *  Out,
const VEC2 &  p,
const VEC2 &  RayOrig,
const VEC2 &  RayDir 
)

Wyznacza najbliższy punkt leżący na półprostej względem punktu p.

Parameters:
Out [out] Można podać NULL.
Returns:
Zwraca parametr t dla półprostej, wyrażony w długościach odcinka.
float common::ClosestPointOnSegment ( VEC3 *  Out,
const VEC3 &  p,
const VEC3 &  p1,
const VEC3 &  p2 
)
float common::ClosestPointOnSegment ( VEC2 *  Out,
const VEC2 &  p,
const VEC2 &  p1,
const VEC2 &  p2 
)

Wyznacza najbliższy punkt leżący na odcinku p1-p2 względem punktu p.

Parameters:
Out [out] Można podać NULL.
Returns:
Zwraca parametr t dla odcinka, wyrażony w długościach odcinka.
void common::ClosestPointOnSphere ( VEC3 *  Out,
const VEC3 &  SphereCenter,
float  SphereRadius,
const VEC3 &  p 
)

Wyznacza najbliższy punkt na powierzchni sfery względem punktu p.

Punkt może być wewnątrz sfery - też jest OK, zwróci z powierzchni sfery. Punkt nie może być dokładnie na środku sfery - wtedy jest dzielenie przez zero.

float common::ClosestPointSegmentSegment ( const VEC3 &  Seg1_Beg,
const VEC3 &  Seg1_End,
const VEC3 &  Seg2_Beg,
const VEC3 &  Seg2_End,
float &  OutSeg1_t,
float &  OutSeg2_t,
VEC3 &  OutSeg1_pt,
VEC3 &  OutSeg2_pt 
)

Oblicza najbliższe sobie punkty na dwóch odcinkach.

Dane są dwa odcinki: Seg1_Beg..Seg1_End i Seg2_Beg..Seg2_End. Funkcja oblicza najbliższe sobie punkty na tych odcinkach. Parametry do tych odcinków zwraca przez OutSeg1_t, OutSeg2_t. Te punkty zwraca przez OutSeg1_pt, OutSeg2_pt. Cała funkcja zwraca kwadrat odległości między tymi punktami.

bool common::ClosestPointsOnLines ( float *  OutT1,
float *  OutT2,
const VEC3 &  RayOrig1,
const VEC3 &  RayDir1,
const VEC3 &  RayOrig2,
const VEC3 &  RayDir2 
)

Funkcja wyznacza parametry t1 i t2 dla punktów na dwóch prostych, w których te proste są najbliżej siebie.

Dane są dwie proste (RayOrig1, RayDir1) i (RayOrig2, RayDir2). Funkcja wyznacza parametry t1 i t2 dla punktów na tych prostych, w których te proste są najbliżej siebie. Jeśli nie da się takich znaleźć (proste są równoległe), funkcja zwraca false. Te punkty można policzyć ze wzorów p1=RayOrig1+t1*RayDir1 i p2=RayOrig2+t2*RayDir2. Proste faktycznie przecinają się jeśli odległość między tymi punktami wynosi ok. 0.

bool common::FrustumToFrustum ( const FRUSTUM_PLANES &  Frustum1_Planes,
const FRUSTUM_POINTS &  Frustum1_Points,
const FRUSTUM_PLANES &  Frustum2_Planes,
const FRUSTUM_POINTS &  Frustum2_Points 
)

Testuje kolizję między dwoma frustumami.

bool common::Intersect2Planes ( const PLANE &  Plane1,
const PLANE &  Plane2,
VEC3 *  OutLineOrig,
VEC3 *  OutLineDir 
)

Wylicza kolizję dwóch płaszczyzn zwracając parametry prostej tworzącej ich przecięcie.

Jesli nie ma kolizji bo płaszczyzny są równoległe, zwraca false. Płaszczyzny muszą być znormalizowane.

Parameters:
OutLineDir [out] nie jest znormalizowany.
bool common::Intersect3Planes ( const PLANE &  P1,
const PLANE &  P2,
const PLANE &  P3,
VEC3 *  OutP 
)

Zwraca punkt przecięcia trzech płaszczyzn lub false, jeśli taki punkt nie istnieje.

Płaszczyzny muszą być znormalizowane.

bool common::IsQuadConvex ( const VEC3 &  a,
const VEC3 &  b,
const VEC3 &  c,
const VEC3 &  d 
)

Zwraca true, jeśli podany czworokąt jest wypukły (nie zdegenerowany, nie wklęsły, nie samoprzecinający się).

Wszystkie cztery wierzchołki muszą leżeć w jednej płaszczyźnie.

bool common::IsQuadConvex ( const VEC2 &  a,
const VEC2 &  b,
const VEC2 &  c,
const VEC2 &  d 
)

Zwraca true, jeśli podany czworokąt jest wypukły.

Nie testowana, może źle działać dla zdegenerowanych - TODO.

float common::Orient2D ( const VEC2 &  a,
const VEC2 &  b,
const VEC2 &  c 
)

Funkcja wielofunkcyjna.

  • Wynik > 0 - punkt c leży na lewo od skierowanego odcinka a-b. Trójkąt abc jest skierowany przeciwnie do ruchu wskazówek zegara.
  • Wynik < 0 - punkt c leży na prawo od skierowanego odcinka a-b. Trójkąt abc jest skierowany zgodnie z ruchem wskazówek zegara.
  • Wynik = 0 - podane trzy punkty leżą w jednej linii.
  • abs(Wynik) - podwojona powierzchnia trójąta abc.
float common::Orient3D ( const VEC3 &  a,
const VEC3 &  b,
const VEC3 &  c,
const VEC3 &  d 
)

Funkcja wielofunkcyjna.

  • Wynik < 0 - punkt d leży nad płaszczyzną definiowaną przez trójkąt abc, widzianą tak że ten trójkąt jest zorientowany przeciwnie do ruchu wskazówek zegara.
  • Wynik > 0 - punkt d leży pod płaszczyzną definiowaną przez trójkąt abc, widzianą tak że ten trójkąt jest zorientowany przeciwnie do ruchu wskazówek zegara.
  • Wynik = 0 - wszystkie cztery punkty leżą w jednej płaszczyźnie.
  • abs(Wynik) - sześciokrotna objętość czworościanu tworzonego przez punkty abcd.
bool common::PlaneToBox ( const PLANE &  plane,
const BOX &  box 
) [inline]

Kolizja płaszczyzny z prostopadłościanem.

Parameters:
plane Płaszczyzna musi być znormalizowana
bool common::PlaneToTriangle ( const PLANE &  Plane,
const VEC3 &  p0,
const VEC3 &  p1,
const VEC3 &  p2 
)

Kolizja płaszczyzny z trójkątem.

bool common::PointInCircle ( const VEC2 &  pt,
const VEC2 &  circleCenter,
float  circleRadius 
) [inline]
bool common::PointInCone ( const VEC3 &  pt,
const VEC3 &  coneVertex,
const VEC3 &  coneDirVec,
float  coneHalfAngle 
)
bool common::PointInConvexPolygon ( const VEC2 &  Point,
const void *  PolygonPoints,
size_t  PolygonPointCount,
int  PolygonPointStride 
)
bool common::PointInConvexPolygon ( const VEC2 &  Point,
const VEC2  PolygonPoints[],
size_t  PolygonPointCount 
)

Sprawdza, czy punkt leży wewnątrz wypukłego wielokąta 2D.

Wielokąt musi mieć wierzchołki zorientowane CW.

bool common::PointInConvexPolyhedron ( const VEC3 &  Point,
const void *  PolyhedronPlanes,
size_t  PolyhedronPlaneCount,
int  PolyhedronPlaneStride 
)
bool common::PointInConvexPolyhedron ( const VEC3 &  Point,
const PLANE  PolyhedronPlanes[],
size_t  PolyhedronPlaneCount 
)

Czy punkt leży wewnątrz wielościana wypukłego.

Płaszczyzny wielościanu mają mieć wektory normalne zwrócone do wewnątrz.

bool common::PointInFrustum ( const VEC3 &  p,
const FRUSTUM_RADAR &  Frustum 
)
bool common::PointInFrustum ( const VEC3 &  p,
const FRUSTUM_PLANES &  Frustum 
)

Zwraca true, jeśli punkt należy do wnętrza podanego frustuma.

bool common::PointInLineSegment ( const VEC3 &  P,
const VEC3 &  SegmentBeg,
const VEC3 &  SegmentEnd 
)

Zwraca true, jeśli punkt leży na odcinku.

Parameters:
P Punkt musi leżeć na prostej przechodzącej przez ten odcinek!
bool common::PointInPolygon ( const VEC2 &  Point,
const void *  PolygonPoints,
size_t  PolygonPointCount,
int  PolygonPointStride 
)
bool common::PointInPolygon ( const VEC2 &  Point,
const VEC2  PolygonPoints[],
size_t  PolygonPointCount 
)

Zwraca true, jeśli podany punkt leży wewnątrz podanego wielokąta (2D).

Wielokąt może mieć dowolny kształt, także niewypukły, a nawet sam się przecinać. Jego wierzchołki mogą biec w dowolnym kierunku.

bool common::PointInSphere ( const VEC3 &  p,
const VEC3 &  SphereCenter,
float  SphereRadius 
)

Zwraca true, jeśli podany punkt należy do sfery.

bool common::PointInTriangle ( const VEC3 &  point,
const VEC3 &  pa,
const VEC3 &  pb,
const VEC3 &  pc 
)

Zwraca true, jeśli punkt należy do trójkąta.

bool common::PointInTriangle ( const VEC2 &  p,
const VEC2 &  a,
const VEC2 &  b,
const VEC2 &  c 
)

Zwraca true, jeśli punkt p należy do trójkąta abc.

bool common::PointOnLine ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)

Zwraca true, jeśli punkt leży na prostej.

Parameters:
LineDir musi być znormalizowane!
bool common::PointOnPlane ( const VEC3 &  p,
const PLANE &  plane 
)

Zwraca true, jeśli podany punkt należy do płaszczyzny.

Płaszczyzna nie musi być znormalizowana.

float common::PointToBoxDistanceSq ( const VEC3 &  p,
const BOX &  box 
)

Kwadrat odległości punktu od prostopadłościanu.

Jeśli p leży wewnątrz tego prostopadłościanu, zwraca 0.

float common::PointToBoxManhattanDistance ( const VEC3 &  p,
const BOX &  box 
)
float common::PointToBoxMaxDistance ( const VEC3 &  p,
const BOX &  box 
)
float common::PointToLine ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)

Zwraca parametr T punktu leżącego na prostej.

Parameters:
P Punkt musi naprawdę leżeć na tej prostej!
float common::PointToLineDistanceSq ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)
float common::PointToLineDistanceSq ( const VEC2 &  P,
const VEC2 &  LineOrig,
const VEC2 &  LineDir 
)

Zwraca kwadrat odległości punktu od prostej.

Parameters:
LineDir musi być znormalizowane!
float common::PointToObbDistanceSq ( const VEC3 &  Point,
const OBB &  Obb 
)

Kwadrat odległości punktu od OBB.

float common::PointToRectDistanceSq ( const VEC2 &  p,
const RECTF &  rect 
)

Returns squared distance from point to rectangle. Returns 0 if point inside rectangle.

float common::PointToRectManhattanDistance ( const VEC2 &  p,
const RECTF &  rect 
)
float common::PointToRectMaxDistance ( const VEC2 &  p,
const RECTF &  rect 
)
float common::PointToSegmentDistanceSq ( const VEC3 &  p,
const VEC3 &  segment_p1,
const VEC3 &  segment_p2 
)

Zwraca kwadrat odległości punktu od odcinka.

float common::PointToSegmentDistanceSq ( const VEC2 &  p,
const VEC2 &  segment_p1,
const VEC2 &  segment_p2 
)

Zwraca kwadrat odległości punktu od odcinka.

float common::PointToSphereDistance ( const VEC3 &  p,
const VEC3 &  SphereCenter,
float  SphereRadius 
)

Zwraca odległość punktu od powierzchni sfery.

Jeśli punkt leży wewnątrz sfery, zwróci odległość ujemną.

bool common::RayToBox ( float *  OutT,
const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const BOX &  Box 
)

Kolizja promienia z prostopadłościanem.

Jeśli promień nie przecina prostopadłościanu, zwraca false. Jeśli promień przecina prostopadłościan, zwraca true i przez OutT zwraca odległość w wielokrotnościach długości RayDir. Jeśli promień przecina prostopadłościan od tyłu, funkcja też zwraca true i zwraca OutT ujemne. Jeśli RayOrig jest wewnątrz prostopadłościanu, funkcja zwraca true i OutT = 0.

int common::RayToCone ( const VEC3 &  rayOrig,
const VEC3 &  rayDir,
const VEC3 &  coneVertex,
const VEC3 &  coneDirVec,
float  coneHalfAngle,
VEC3  intersections[2] 
)
Parameters:
rayDir Must be normalized.
coneDirVec Must be normalized.
coneHalfAngle Must be less than PI_2.
Returns:
Number of intersections.
bool common::RayToConvexPolygon ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const void *  PolygonPoints,
size_t  PolygonPointCount,
int  PolygonPointStride,
bool  BackfaceCulling,
float *  OutT,
VEC3 *  OutPoint,
const PLANE *  PolygonPlane = NULL 
)
bool common::RayToConvexPolygon ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3  PolygonPoints[],
size_t  PolygonPointCount,
bool  BackfaceCulling,
float *  OutT,
VEC3 *  OutPoint,
const PLANE *  PolygonPlane = NULL 
)

Zwraca true, jeśli promień przecina wielokąt wypukły 3D i wtedy przez OutT zwraca parametr dla promienia.

Wierzchołki wielokąta muszą leżeć w jednej płaszczyźnie. Jeśli kolizja jest od tyłu początku promienia, zwraca true i OutT ujemne. Uwaga! Stosuje rzutowanie na jedną z głównych płaszczyzn, testowana tylko dla jednej z trzech możliwych. BackfaceCulling może działać źle.

Parameters:
BackfaceCulling true oznacza, że promień trafia tylko jeśli wchodzi z jednej strony, z tej z której wierzchołki wielokąta są widoczne jako zorientowane w kierunku CW.
PolygonPlane Opcjonalny. Podaj, jeśli masz już wyliczony.
bool common::RayToConvexPolyhedron ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const void *  PolyhedronPlanes,
size_t  PolyhedronPlaneCount,
int  PolyhedronPlaneStride,
float *  OutBegT,
float *  OutEndT 
)
bool common::RayToConvexPolyhedron ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const PLANE  PolyhedronPlanes[],
size_t  PolyhedronPlaneCount,
float *  OutBegT,
float *  OutEndT 
)

Kolizja promienia z wielościanem wypukłym.

Płaszczyzny wielościanu mają mieć wektory normalne zwrócone do wewnątrz. Ta funkcja testuje tylko kolizję półprostej. Jeśli wielościan jest z tyłu promienia, funkcja zwraca false. T zawsze wychodzą nieujemne.

bool common::RayToCylinder ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3 &  CylinderBeg,
const VEC3 &  CylinderEnd,
float  CylinderRadius,
float *  OutT 
)

Kolizja promienia z dowolnie zorientowanym cylindrem.

Jeśli kolizja jest z tyłu, też zwraca true i OutT wychodzi ujemne. Zwraca zawsze ten z dwóch punktów przecięcia który ma mniejsze OutT.

bool common::RayToFrustum ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const FRUSTUM_PLANES &  Frustum,
float *  t_near,
float *  t_far 
)

Kolizja promienia z frustumem.

bool common::RayToPlane ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const PLANE &  Plane,
float *  OutT,
float *  OutVD 
)

Przecięcie promienia z płaszczyzną.

Parameters:
[out] OutT Zwrócony parametr dla promienia (NIE można podać 0)
[out] OutVD Zwrócona liczba mówiąca o zwrocie płaszczyzny (NIE można podać 0) OutVD > 0 oznacza, że płaszczyzna jest tyłem do promienia
Returns:
false jeśli promień był równoległy do płaszczyzny i nie udało się nic policzyć.
bool common::RayToPolygon ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const void *  PolygonPoints,
size_t  PolygonPointCount,
int  PolygonPointStride,
bool  BackfaceCulling,
float *  OutT,
VEC3 *  OutPoint,
const PLANE *  PolygonPlane = NULL 
)
bool common::RayToPolygon ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3  PolygonPoints[],
size_t  PolygonPointCount,
bool  BackfaceCulling,
float *  OutT,
VEC3 *  OutPoint,
const PLANE *  PolygonPlane = NULL 
)

Zwraca true, jeśli promień przecina wielokąt 3D i wtedy przez OutT zwraca parametr dla promienia.

Wierzchołki wielokąta muszą leżeć w jednej płaszczyźnie. Wielokąt może być dowolny, nie musi być wypukły. Uwaga! Stosuje rzutowanie na jedną z głównych płaszczyzn, testowana tylko dla jednej z trzech możliwych. BackfaceCulling może działać źle.

Parameters:
BackfaceCulling true oznacza, że promień trafia tylko jeśli wchodzi z jednej strony, z tej z której wierzchołki wielokąta są widoczne jako zorientowane w kierunku CW.
PolygonPlane Opcjonalny. Podaj, jeśli masz już wyliczony.
bool common::RayToQuad ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3  QuadPoints[4],
VEC3 *  OutPoint = NULL 
)

Kolizja promienia z czworokątem w 3D.

Czworokąt musi być płaski, wypukły i zorientowany odpowiednio. Kolizja działa tylko w jedną stronę. Dla T ujemnego również zwraca false. Niestety nie zwraca T.

Parameters:
OutPoint Parametr opcjonalny.
bool common::RayToSphere ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3 &  SphereCenter,
float  SphereRadius,
float *  OutT 
)

Wylicza kolizję promienia ze sferą.

Jeśli nie ma kolizji, zwraca false. Jeśli jest kolizja, zwraca true i parametr T. Jeśli kolizja jest z tyłu promienia - wcześniej niż jego początek - zwraca true i T ujemne. Jeśli początek promienia jest wewnątrz sfery, zwraca true i T=0

bool common::RayToTriangle ( const VEC3 &  RayOrig,
const VEC3 &  RayDir,
const VEC3 &  p0,
const VEC3 &  p1,
const VEC3 &  p2,
bool  BackfaceCulling,
float *  OutT 
)

Kolizja promienia z trójkątem.

Parameters:
[out] OutT Można podać NULL jeśli nie interesuje nas odległość kolizji.
BackfaceCulling Jeśli true, funkcja zawsze uwzględnia wyłącznie kolizję z trójkątem zwróconym w stronę CW (jak w DirectX).
float common::RectToRectDistanceSq ( const RECTF &  rect1,
const RECTF &  rect2 
)

Returns squared distance between two rectangles. Returns 0 if given rectangles overlap.

float common::RectToRectManhattanDistance ( const RECTF &  rect1,
const RECTF &  rect2 
)
float common::RectToRectMaxDistance ( const RECTF &  rect1,
const RECTF &  rect2 
)
bool common::SegmentIntersectsOrIsContainedInCone ( const VEC3 &  segmentPoint1,
const VEC3 &  segmentPoint2,
const VEC3 &  coneVertex,
const VEC3 &  coneDirVec,
const float  coneHalfAngle 
)
bool common::SegmentIntersectsOrIsContainedInCone ( const VEC3 &  segmentPoint1,
const VEC3 &  segmentPoint2,
const VEC3 &  coneVertex,
const VEC3 &  coneDirVec,
const float  coneHalfAngle,
VEC3  intersections[2],
int &  numIntersectionsFound 
)
bool common::SegmentToSegment ( const VEC2 &  Seg1_Beg,
const VEC2 &  Seg1_End,
const VEC2 &  Seg2_Beg,
const VEC2 &  Seg2_End,
float *  OutSeg1_t = NULL 
)

Zwraca true, jeśli dwa odcinki 2D zachodzą na siebie.

Parameters:
OutSeg1_t Parametr opcjonalny. Zwraca parametr 0..1 miejsca przecięcia na odcinku Seg1.
bool common::SphereInBox ( const VEC3 &  SphereCenter,
float  SphereRadius,
const BOX &  Box 
)

Zwraca true, jeśli sfera zawiera się w całości w prostopadłościanie.

bool common::SphereInFrustum ( const VEC3 &  SphereCenter,
float  SphereRadius,
const FRUSTUM_PLANES &  Frustum 
)

Zwraca true, jeśli sfera zawiera się w całości wewnątrz frustuma.

bool common::SphereToBox ( const VEC3 &  SphereCenter,
float  SphereRadius,
const BOX &  Box 
)

Zwraca true jeśli kula koliduje z prostopadłościanem (także jeśli jest w jego środku).

bool common::SphereToCapsule ( const VEC3 &  SphereCenter,
float  SphereRadius,
const VEC3 &  Capsule_Beg,
const VEC3 &  Capsule_End,
float  Capsule_Radius 
)

Kolizja sfery z kapsułą.

bool common::SphereToFrustum ( const VEC3 &  SphereCenter,
float  SphereRadius,
const FRUSTUM_RADAR &  Frustum 
)

Testuje przecięcie sfery z frustumem.

Uwaga! Wygląda na to, że z nienznaych przyczyn ta funkcja nie zwraca true także dla sfery która nie jest ściśle kolidująca z frustumem, ale z pewnym niewielkim marginesem błędu w kierunku +/- Right.

bool common::SphereToFrustum ( const VEC3 &  SphereCenter,
float  SphereRadius,
const FRUSTUM_PLANES &  FrustumPlanes,
const FRUSTUM_POINTS *  OptFrustumPoints = NULL 
)

Zwraca true, jeśli sfera koliduje z frustumem.

Test dokładny, ale wolniejszy i wymaga też reprezentacji punktowej frustuma.

Parameters:
[in] OptFrustumPoints Parametr opcjonalny - podaj jeśli masz już wyliczony.
bool common::SphereToFrustum_Fast ( const VEC3 &  SphereCenter,
float  SphereRadius,
const FRUSTUM_PLANES &  Frustum 
)

Zwraca true, jeśli sfera koliduje z frustumem.

Uwaga! W rzadkich przypadkach może stwierdzić kolizję chociaż jej nie ma.

bool common::SphereToObb ( const VEC3 &  SphereCenter,
float  SphereRadius,
const OBB &  Obb 
)

Zwraca true, jeśli sfera koliduje z prostopadłościanem zorientowanym.

bool common::SphereToPlane ( const VEC3 &  SphereCenter,
float  SphereRadius,
const PLANE &  Plane 
)

Zwraca true, jeśli sfera koliduje z płaszczyzną.

Płaszczyzna musi być znormalizowana.

bool common::SphereToSphere ( const VEC3 &  Center1,
float  Radius1,
const VEC3 &  Center2,
float  Radius2 
)

Zwraca true jeśli podane dwie sfery kolidują ze sobą.

bool common::SphereToTriangle ( const VEC3 &  SphereCenter,
float  SphereRadius,
const VEC3 &  TriA,
const VEC3 &  TriB,
const VEC3 &  TriC 
)

Zwraca true, jeśli sfera koliduje z trójkątem.

bool common::SweptBoxToBox ( const BOX &  Box1,
const BOX &  Box2,
const VEC3 &  SweepDirBox1,
float *  OutT1,
float *  OutT2 
)

Kolizja poruszającego się AABB z drugim AABB.

  • Jeśli nie zachodzi, zwraca false.
  • Jeśli zachodzi, zwraca true i T jako czas początkowy kontaktu.
  • Jeśli zachodzi z tyłu, zwraca true i T ujemne.
  • Jeśli zachodzi w chwili początkowej, zwraca true i T=0.
Parameters:
SweepDirBox1 Nie musi być znormalizowany. T będzie wyrażone we wielokrotnościach jego długości.
bool common::SweptSphereToFrustum ( const VEC3 &  SphereCenter,
float  SphereRadius,
const VEC3 &  SphereSweepDir,
const FRUSTUM_PLANES &  Frustum 
)

Oblicza kolizję poruszającej się sfery z frustumem.

  • Frustum musi być znormalizowany.
  • Jeśli sfera leży w środku, też oczywiście zwraca true.
bool common::SweptSphereToPlane ( const VEC3 &  SphereCenter,
float  SphereRadius,
const VEC3 &  SphereSweepDir,
const PLANE &  Plane,
float *  OutT0,
float *  OutT1 
)

Liczy kolizję poruszającej się sfery z płaszczyzną.

  • Płaszczyzna musi być znormalizowana.
  • Jako OutT0 i OutT1 można podawać NULL, jeśli nas akurat nie interesuje.
  • Jeśli sfera porusza się w drugą stronę, też wychodzi true i T wychodzą ujemne.
  • Jeśli sfera koliduje z płaszczyzną i porusza się w kierunku do niej równoległym, jest T0=0, T1=MAXFLOAT i return true.
bool common::SweptSphereToSphere ( const VEC3 &  SphereCenter1,
float  SphereRadius1,
const VEC3 &  SphereCenter2,
float  SphereRadius2,
const VEC3 &  SphereSweepDir1,
float *  OutT1,
float *  OutT2 
)

Analityczna kolizja dwóch poruszających się sfer.

  • Jeśli nie ma kolizji, zwraca false. T1 i T2 niezdefiniowane.
  • Jeśli jest kolizja, zwraca true. Wówczas przez T1 i T2 zwraca czas początku i końca kolizji wyrażony we wielokrotnościach długości SphereSweepDir1 (T1 <= T2).
  • Jeśli kolizja następuje z tyłu, też zwraca true, a T1 i/lub T2 będą ujemne.
Parameters:
SphereSweepDir1 Kierunek ruchu sfery 1 w stosunku do sfery 2. Nie musi być znormalizowany.
bool common::TriangleInBox ( const VEC3 &  p1,
const VEC3 &  p2,
const VEC3 &  p3,
const BOX &  Box 
)

Zwraca true, jeśli trójkąt zawiera się w prostopadłościanie.

bool common::TriangleInFrustum ( const VEC3 &  t1,
const VEC3 &  t2,
const VEC3 &  t3,
const FRUSTUM_PLANES &  Frustum 
)

Testuje, czy trójkąt leży w całości wewnątrz frustuma.

bool common::TriangleToBox ( const VEC3 &  TriA,
const VEC3 &  TriB,
const VEC3 &  TriC,
const BOX &  Box 
)

Zwraca true, jeśli trójkąt przecina prostopadłościan lub się w nim zawiera.

Parameters:
[in] OptTrianglePlane Można podać jeśli się już ma wyliczone, żeby przyspieszyć. Nie musi być znormalizowane.
bool common::TriangleToFrustum ( const VEC3 &  t1,
const VEC3 &  t2,
const VEC3 &  t3,
const PLANE *  OptTrianglePlane,
const FRUSTUM_PLANES &  FrustumPlanes,
const FRUSTUM_POINTS *  OptFrustumPoints 
)

Testuje kolizję trójkąta z frustumem.

Parameters:
[in] OptTrianglePlane Podaj jeśli masz już wyliczone, aby przyspieszyć.
[in] OptFrustumPoints Podaj jeśli masz już wyliczone, aby przyspieszyć.
bool common::TriangleToTriangle ( const VEC3 &  V0,
const VEC3 &  V1,
const VEC3 &  V2,
const VEC3 &  U0,
const VEC3 &  U1,
const VEC3 &  U2 
)

Testuje kolizję dwóch trójkątów 3D.

Nie wiem co się dzieje jeśli trójkąty są zdegenerowane.


Generated on Wed Dec 16 20:44:53 2009 for CommonLib by  doxygen 1.6.1