Added function: Vector3RotateByQuaternion()
Rotate a Vector3 by a Quaternion
This commit is contained in:
parent
d0166c9d45
commit
7dedb84fd0
1 changed files with 80 additions and 68 deletions
|
@ -122,20 +122,20 @@
|
||||||
float m2, m6, m10, m14;
|
float m2, m6, m10, m14;
|
||||||
float m3, m7, m11, m15;
|
float m3, m7, m11, m15;
|
||||||
} Matrix;
|
} Matrix;
|
||||||
|
|
||||||
|
// Quaternion type
|
||||||
|
typedef struct Quaternion {
|
||||||
|
float x;
|
||||||
|
float y;
|
||||||
|
float z;
|
||||||
|
float w;
|
||||||
|
} Quaternion;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// NOTE: Helper types to be used instead of array return types for *ToFloat functions
|
// NOTE: Helper types to be used instead of array return types for *ToFloat functions
|
||||||
typedef struct float3 { float v[3]; } float3;
|
typedef struct float3 { float v[3]; } float3;
|
||||||
typedef struct float16 { float v[16]; } float16;
|
typedef struct float16 { float v[16]; } float16;
|
||||||
|
|
||||||
// Quaternion type
|
|
||||||
typedef struct Quaternion {
|
|
||||||
float x;
|
|
||||||
float y;
|
|
||||||
float z;
|
|
||||||
float w;
|
|
||||||
} Quaternion;
|
|
||||||
|
|
||||||
#include <math.h> // Required for: sinf(), cosf(), tan(), fabs()
|
#include <math.h> // Required for: sinf(), cosf(), tan(), fabs()
|
||||||
|
|
||||||
//----------------------------------------------------------------------------------
|
//----------------------------------------------------------------------------------
|
||||||
|
@ -398,6 +398,18 @@ RMDEF Vector3 Vector3Transform(Vector3 v, Matrix mat)
|
||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Transform a vector by quaternion rotation
|
||||||
|
RMDEF Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q)
|
||||||
|
{
|
||||||
|
Vector3 result = { 0 };
|
||||||
|
|
||||||
|
result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y);
|
||||||
|
result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z);
|
||||||
|
result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z);
|
||||||
|
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
// Calculate linear interpolation between two vectors
|
// Calculate linear interpolation between two vectors
|
||||||
RMDEF Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount)
|
RMDEF Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue