Kolizje
[Moduł Math]


Funkcje

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::PointToLineDistance (const VEC3 &P, const VEC3 &LineOrig, const VEC3 &LineDir)
 Zwraca odległość punktu od prostej.
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.
void common::ClosestPointOnLineSegment (VEC3 *Out, const VEC3 &P, const VEC3 &P1, const VEC3 &P2)
 Wyznacza najbliższy punkt leżący na odcinku P1-P2 względem punktu P.
void common::ClosestPointInBox (VEC3 *Out, const BOX &Box, const VEC3 &p)
 Wyznacza najbliższy punkt wewnątrz prostopadłościanu względem punktu p.
float common::PointToBoxDistance (const VEC3 &p, const BOX &box)
 Odległość punktu od prostopadłościanu.
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::PointOnTriangle (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::RayToFrustum (const VEC3 &RayOrig, const VEC3 &RayDir, const FRUSTUM_PLANES &Frustum, float *t_near, float *t_far)
 Kolizja promienia z frustumem.
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::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.
bool common::PlaneToBox (const PLANE &plane, const BOX &box)
 Kolizja płaszczyzny z prostopadłościanem.
int common::ClassifyBoxToPlane (const PLANE &plane, const BOX &box)
 Klasyfikuje położenie prostopadłościanu względem płaszczyzny.
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 &p1, const VEC3 &p2, const VEC3 &p3, const BOX &Box, const PLANE *OptTrianglePlane=NULL)
 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::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 *LineOrig, VEC3 *LineDir)
 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::IntersectLines (const VEC2 &p1, const VEC2 &p2, const VEC2 &p3, const VEC2 &p4)
 Zwraca true, jeśli dwa odcinki 2D: p1-p2 i p3-p4 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::PointInPolygon (const VEC2 &Point, const VEC2 PolygonPoints[], uint PolygonPointCount)
 Zwraca true, jeśli podany punkt leży wewnątrz podanego wielokąta (2D).
bool common::RayToPolygon (const VEC3 &RayOrig, const VEC3 &RayDir, const VEC3 PolygonPoints[], uint PolygonPointCount, bool BackfaceCulling, float *OutT)
 Zwraca true, jeśli promień przecina wielokąt (3D) i wtedy przez OutT zwraca parametr dla promienia.
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 *OutT)
 Kolizja poruszającego się AABB z drugim AABB.

Opis szczegółowy


Dokumentacja funkcji

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.

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.

Parametry:
[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.

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

int common::ClassifyFrustumToPlane ( const FRUSTUM_POINTS &  Frustum,
const PLANE &  Plane 
)

Kolizja płaszczyzny z frustumem (klasyfikacja).

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.

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::ClosestPointOnLineSegment ( VEC3 *  Out,
const VEC3 &  P,
const VEC3 &  P1,
const VEC3 &  P2 
)

Wyznacza najbliższy punkt leżący na odcinku P1-P2 względem punktu P.

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

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

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.

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 *  LineOrig,
VEC3 *  LineDir 
)

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

Jesli nie ma kolizji, zwraca false. Zwrócony kierunek promienia 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.

bool common::IntersectLines ( const VEC2 &  p1,
const VEC2 &  p2,
const VEC2 &  p3,
const VEC2 &  p4 
)

Zwraca true, jeśli dwa odcinki 2D: p1-p2 i p3-p4 zachodzą na siebie.

bool common::PlaneToBox ( const PLANE &  plane,
const BOX &  box 
)

Kolizja płaszczyzny z prostopadłościanem.

bool common::PlaneToTriangle ( const PLANE &  Plane,
const VEC3 &  p0,
const VEC3 &  p1,
const VEC3 &  p2 
)

Kolizja płaszczyzny z trójkątem.

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.

Parametry:
P Punkt musi leżeć na prostej przechodzącej przez ten odcinek!

bool common::PointInPolygon ( const VEC2 &  Point,
const VEC2  PolygonPoints[],
uint  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::PointOnLine ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)

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

Parametry:
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.

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

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

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

Odległość punktu od prostopadłościanu.

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

float common::PointToLine ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)

Zwraca parametr T punktu leżącego na prostej.

Parametry:
P Punkt musi naprawdę leżeć na tej prostej!

float common::PointToLineDistance ( const VEC3 &  P,
const VEC3 &  LineOrig,
const VEC3 &  LineDir 
)

Zwraca odległość punktu od prostej.

Parametry:
LineDir musi być znormalizowane!

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.

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ą.

Parametry:
[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
Zwraca:
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 VEC3  PolygonPoints[],
uint  PolygonPointCount,
bool  BackfaceCulling,
float *  OutT 
)

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. Jeśli BackfaceCulling = true, promień trafia tylko jeśli wchodzi z jednej strony, z tej z której wierzchołki wielokąta są widoczne jako zorientowane w kierunku zgodnym ze wskazówkami zeraga.

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.

Parametry:
[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).

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::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.

Parametry:
[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::SphereToPlane ( const VEC3 &  SphereCenter,
float  SphereRadius,
const PLANE &  Plane 
)

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

Płaszczyzna chyba 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::SweptBoxToBox ( const BOX &  Box1,
const BOX &  Box2,
const VEC3 &  SweepDirBox1,
float *  OutT 
)

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.

Parametry:
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.

Parametry:
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 &  p1,
const VEC3 &  p2,
const VEC3 &  p3,
const BOX &  Box,
const PLANE *  OptTrianglePlane = NULL 
)

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

Parametry:
[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.

Parametry:
[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.


Wygenerowano Sat Mar 29 18:17:01 2008 dla CommonLib programem  doxygen 1.5.5