|
|
@ -498,14 +498,14 @@ RMAPI Vector3 Vector3Perpendicular(Vector3 v) |
|
|
float min = (float) fabs(v.x); |
|
|
float min = (float) fabs(v.x); |
|
|
Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f}; |
|
|
Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f}; |
|
|
|
|
|
|
|
|
if (fabs(v.y) < min) |
|
|
|
|
|
|
|
|
if (fabsf(v.y) < min) |
|
|
{ |
|
|
{ |
|
|
min = (float) fabs(v.y); |
|
|
min = (float) fabs(v.y); |
|
|
Vector3 tmp = {0.0f, 1.0f, 0.0f}; |
|
|
Vector3 tmp = {0.0f, 1.0f, 0.0f}; |
|
|
cardinalAxis = tmp; |
|
|
cardinalAxis = tmp; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (fabs(v.z) < min) |
|
|
|
|
|
|
|
|
if (fabsf(v.z) < min) |
|
|
{ |
|
|
{ |
|
|
Vector3 tmp = {0.0f, 0.0f, 1.0f}; |
|
|
Vector3 tmp = {0.0f, 0.0f, 1.0f}; |
|
|
cardinalAxis = tmp; |
|
|
cardinalAxis = tmp; |
|
|
@ -1516,7 +1516,7 @@ RMAPI Quaternion QuaternionInvert(Quaternion q) |
|
|
|
|
|
|
|
|
float lengthSq = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; |
|
|
float lengthSq = q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w; |
|
|
|
|
|
|
|
|
if (lengthSq != 0.0) |
|
|
|
|
|
|
|
|
if (lengthSq != 0.0f) |
|
|
{ |
|
|
{ |
|
|
float invLength = 1.0f/lengthSq; |
|
|
float invLength = 1.0f/lengthSq; |
|
|
|
|
|
|
|
|
@ -1619,14 +1619,14 @@ RMAPI Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount) |
|
|
cosHalfTheta = -cosHalfTheta; |
|
|
cosHalfTheta = -cosHalfTheta; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
if (fabs(cosHalfTheta) >= 1.0f) result = q1; |
|
|
|
|
|
|
|
|
if (fabsf(cosHalfTheta) >= 1.0f) result = q1; |
|
|
else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount); |
|
|
else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount); |
|
|
else |
|
|
else |
|
|
{ |
|
|
{ |
|
|
float halfTheta = acosf(cosHalfTheta); |
|
|
float halfTheta = acosf(cosHalfTheta); |
|
|
float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta); |
|
|
float sinHalfTheta = sqrtf(1.0f - cosHalfTheta*cosHalfTheta); |
|
|
|
|
|
|
|
|
if (fabs(sinHalfTheta) < 0.001f) |
|
|
|
|
|
|
|
|
if (fabsf(sinHalfTheta) < 0.001f) |
|
|
{ |
|
|
{ |
|
|
result.x = (q1.x*0.5f + q2.x*0.5f); |
|
|
result.x = (q1.x*0.5f + q2.x*0.5f); |
|
|
result.y = (q1.y*0.5f + q2.y*0.5f); |
|
|
result.y = (q1.y*0.5f + q2.y*0.5f); |
|
|
@ -1792,7 +1792,7 @@ RMAPI Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle) |
|
|
// Get the rotation angle and axis for a given quaternion |
|
|
// Get the rotation angle and axis for a given quaternion |
|
|
RMAPI void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle) |
|
|
RMAPI void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle) |
|
|
{ |
|
|
{ |
|
|
if (fabs(q.w) > 1.0f) |
|
|
|
|
|
|
|
|
if (fabsf(q.w) > 1.0f) |
|
|
{ |
|
|
{ |
|
|
// QuaternionNormalize(q); |
|
|
// QuaternionNormalize(q); |
|
|
float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); |
|
|
float length = sqrtf(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w); |
|
|
|