mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2025-02-22 03:41:45 +00:00
New fixed math functions - ClosestPointOnVector, and Strength.
Normal also returns length now, since it is free.
This commit is contained in:
parent
1029463741
commit
c4d5afdd80
2 changed files with 140 additions and 103 deletions
|
@ -458,6 +458,20 @@ vector3_t *FV3_ClosestPointOnLine(const vector3_t *Line, const vector3_t *p, vec
|
||||||
return FV3_AddEx(&Line[0], &V, out);
|
return FV3_AddEx(&Line[0], &V, out);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// ClosestPointOnVector
|
||||||
|
//
|
||||||
|
// Similar to ClosestPointOnLine, but uses a vector instead of two points.
|
||||||
|
//
|
||||||
|
void FV3_ClosestPointOnVector(const vector3_t *dir, const vector3_t *p, vector3_t *out)
|
||||||
|
{
|
||||||
|
fixed_t t = FV3_Dot(dir, p);
|
||||||
|
|
||||||
|
// Return the point on the line closest
|
||||||
|
FV3_MulEx(dir, t, out);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// ClosestPointOnTriangle
|
// ClosestPointOnTriangle
|
||||||
//
|
//
|
||||||
|
@ -519,7 +533,7 @@ vector3_t *FV3_Point2Vec (const vector3_t *point1, const vector3_t *point2, vect
|
||||||
//
|
//
|
||||||
// Calculates the normal of a polygon.
|
// Calculates the normal of a polygon.
|
||||||
//
|
//
|
||||||
void FV3_Normal (const vector3_t *a_triangle, vector3_t *a_normal)
|
fixed_t FV3_Normal(const vector3_t *a_triangle, vector3_t *a_normal)
|
||||||
{
|
{
|
||||||
vector3_t a_1;
|
vector3_t a_1;
|
||||||
vector3_t a_2;
|
vector3_t a_2;
|
||||||
|
@ -529,7 +543,28 @@ void FV3_Normal (const vector3_t *a_triangle, vector3_t *a_normal)
|
||||||
|
|
||||||
FV3_Cross(&a_1, &a_2, a_normal);
|
FV3_Cross(&a_1, &a_2, a_normal);
|
||||||
|
|
||||||
FV3_NormalizeEx(a_normal, a_normal);
|
return FV3_NormalizeEx(a_normal, a_normal);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Strength
|
||||||
|
//
|
||||||
|
// Measures the 'strength' of a vector in a particular direction.
|
||||||
|
//
|
||||||
|
fixed_t FV3_Strength(const vector3_t *a_1, const vector3_t *dir)
|
||||||
|
{
|
||||||
|
vector3_t normal;
|
||||||
|
fixed_t dist = FV3_NormalizeEx(a_1, &normal);
|
||||||
|
fixed_t dot = FV3_Dot(&normal, dir);
|
||||||
|
|
||||||
|
FV3_ClosestPointOnVector(dir, a_1, &normal);
|
||||||
|
|
||||||
|
dist = FV3_Magnitude(&normal);
|
||||||
|
|
||||||
|
if (dot < 0) // Not facing same direction, so negate result.
|
||||||
|
dist = -dist;
|
||||||
|
|
||||||
|
return dist;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|
|
@ -394,9 +394,11 @@ boolean FV3_Equal(const vector3_t *a_1, const vector3_t *a_2);
|
||||||
fixed_t FV3_Dot(const vector3_t *a_1, const vector3_t *a_2);
|
fixed_t FV3_Dot(const vector3_t *a_1, const vector3_t *a_2);
|
||||||
vector3_t *FV3_Cross(const vector3_t *a_1, const vector3_t *a_2, vector3_t *a_o);
|
vector3_t *FV3_Cross(const vector3_t *a_1, const vector3_t *a_2, vector3_t *a_o);
|
||||||
vector3_t *FV3_ClosestPointOnLine(const vector3_t *Line, const vector3_t *p, vector3_t *out);
|
vector3_t *FV3_ClosestPointOnLine(const vector3_t *Line, const vector3_t *p, vector3_t *out);
|
||||||
|
void FV3_ClosestPointOnVector(const vector3_t *dir, const vector3_t *p, vector3_t *out);
|
||||||
void FV3_ClosestPointOnTriangle(const vector3_t *tri, const vector3_t *point, vector3_t *result);
|
void FV3_ClosestPointOnTriangle(const vector3_t *tri, const vector3_t *point, vector3_t *result);
|
||||||
vector3_t *FV3_Point2Vec(const vector3_t *point1, const vector3_t *point2, vector3_t *a_o);
|
vector3_t *FV3_Point2Vec(const vector3_t *point1, const vector3_t *point2, vector3_t *a_o);
|
||||||
void FV3_Normal(const vector3_t *a_triangle, vector3_t *a_normal);
|
fixed_t FV3_Normal(const vector3_t *a_triangle, vector3_t *a_normal);
|
||||||
|
fixed_t FV3_Strength(const vector3_t *a_1, const vector3_t *dir);
|
||||||
fixed_t FV3_PlaneDistance(const vector3_t *a_normal, const vector3_t *a_point);
|
fixed_t FV3_PlaneDistance(const vector3_t *a_normal, const vector3_t *a_point);
|
||||||
boolean FV3_IntersectedPlane(const vector3_t *a_triangle, const vector3_t *a_line, vector3_t *a_normal, fixed_t *originDistance);
|
boolean FV3_IntersectedPlane(const vector3_t *a_triangle, const vector3_t *a_line, vector3_t *a_normal, fixed_t *originDistance);
|
||||||
fixed_t FV3_PlaneIntersection(const vector3_t *pOrigin, const vector3_t *pNormal, const vector3_t *rOrigin, const vector3_t *rVector);
|
fixed_t FV3_PlaneIntersection(const vector3_t *pOrigin, const vector3_t *pNormal, const vector3_t *rOrigin, const vector3_t *rVector);
|
||||||
|
|
Loading…
Reference in a new issue