diff --git a/examples/shaders/shaders_spotlight.c b/examples/shaders/shaders_spotlight.c index 944f3d58..6d1d5bae 100644 --- a/examples/shaders/shaders_spotlight.c +++ b/examples/shaders/shaders_spotlight.c @@ -245,7 +245,7 @@ void ResetStar(Star *s) } while (!(fabs(s->vel.x) + fabs(s->vel.y) > 1)); - s->pos = Vector2Add(s->pos, Vector2MultiplyV(s->vel, (Vector2){ 8, 8 })); + s->pos = Vector2Add(s->pos, Vector2Multiply(s->vel, (Vector2){ 8, 8 })); } void UpdateStar(Star *s) diff --git a/src/raymath.h b/src/raymath.h index 68d08247..398aef4a 100644 --- a/src/raymath.h +++ b/src/raymath.h @@ -179,6 +179,13 @@ RMDEF Vector2 Vector2Add(Vector2 v1, Vector2 v2) return result; } +// Add vector and float value +RMDEF Vector2 Vector2AddValue(Vector2 v, float add) +{ + Vector2 result = { v.x + add, v.y + add }; + return result; +} + // Subtract two vectors (v1 - v2) RMDEF Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) { @@ -186,6 +193,13 @@ RMDEF Vector2 Vector2Subtract(Vector2 v1, Vector2 v2) return result; } +// Subtract vector by float value +RMDEF Vector2 Vector2SubtractValue(Vector2 v, float sub) +{ + Vector2 result = { v.x - sub, v.y - sub }; + return result; +} + // Calculate vector length RMDEF float Vector2Length(Vector2 v) { @@ -223,7 +237,7 @@ RMDEF Vector2 Vector2Scale(Vector2 v, float scale) } // Multiply vector by vector -RMDEF Vector2 Vector2MultiplyV(Vector2 v1, Vector2 v2) +RMDEF Vector2 Vector2Multiply(Vector2 v1, Vector2 v2) { Vector2 result = { v1.x*v2.x, v1.y*v2.y }; return result; @@ -236,15 +250,8 @@ RMDEF Vector2 Vector2Negate(Vector2 v) return result; } -// Divide vector by a float value -RMDEF Vector2 Vector2Divide(Vector2 v, float div) -{ - Vector2 result = { v.x/div, v.y/div }; - return result; -} - // Divide vector by vector -RMDEF Vector2 Vector2DivideV(Vector2 v1, Vector2 v2) +RMDEF Vector2 Vector2Divide(Vector2 v1, Vector2 v2) { Vector2 result = { v1.x/v2.x, v1.y/v2.y }; return result; @@ -253,7 +260,7 @@ RMDEF Vector2 Vector2DivideV(Vector2 v1, Vector2 v2) // Normalize provided vector RMDEF Vector2 Vector2Normalize(Vector2 v) { - Vector2 result = Vector2Divide(v, Vector2Length(v)); + Vector2 result = Vector2Scale(v, 1/Vector2Length(v)); return result; } @@ -301,6 +308,13 @@ RMDEF Vector3 Vector3Add(Vector3 v1, Vector3 v2) return result; } +// Add vector and float value +RMDEF Vector3 Vector3AddValue(Vector3 v, float add) +{ + Vector3 result = { v.x + add, v.y + add, v.z + add }; + return result; +} + // Subtract two vectors RMDEF Vector3 Vector3Subtract(Vector3 v1, Vector3 v2) { @@ -308,6 +322,13 @@ RMDEF Vector3 Vector3Subtract(Vector3 v1, Vector3 v2) return result; } +// Subtract vector by float value +RMDEF Vector3 Vector3SubtractValue(Vector3 v, float sub) +{ + Vector3 result = { v.x - sub, v.y - sub, v.z - sub }; + return result; +} + // Multiply vector by scalar RMDEF Vector3 Vector3Scale(Vector3 v, float scalar) { @@ -386,15 +407,8 @@ RMDEF Vector3 Vector3Negate(Vector3 v) return result; } -// Divide vector by a float value -RMDEF Vector3 Vector3Divide(Vector3 v, float div) -{ - Vector3 result = { v.x / div, v.y / div, v.z / div }; - return result; -} - // Divide vector by vector -RMDEF Vector3 Vector3DivideV(Vector3 v1, Vector3 v2) +RMDEF Vector3 Vector3Divide(Vector3 v1, Vector3 v2) { Vector3 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z }; return result; @@ -1040,6 +1054,34 @@ RMDEF float16 MatrixToFloatV(Matrix mat) // Module Functions Definition - Quaternion math //---------------------------------------------------------------------------------- +// Add two quaternions +RMDEF Quaternion QuaternionAdd(Quaternion q1, Quaternion q2) +{ + Quaternion result = {q1.x + q2.x, q1.y + q2.y, q1.z + q2.z, q1.w + q2.w}; + return result; +} + +// Add quaternion and float value +RMDEF Quaternion QuaternionAddValue(Quaternion q, float add) +{ + Quaternion result = {q.x + add, q.y + add, q.z + add, q.w + add}; + return result; +} + +// Subtract two quaternions +RMDEF Quaternion QuaternionSubtract(Quaternion q1, Quaternion q2) +{ + Quaternion result = {q1.x - q2.x, q1.y - q2.y, q1.z - q2.z, q1.w - q2.w}; + return result; +} + +// Subtract quaternion and float value +RMDEF Quaternion QuaternionSubtractValue(Quaternion q, float sub) +{ + Quaternion result = {q.x - sub, q.y - sub, q.z - sub, q.w - sub}; + return result; +} + // Returns identity quaternion RMDEF Quaternion QuaternionIdentity(void) { @@ -1108,6 +1150,28 @@ RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2) return result; } +// Scale quaternion by float value +RMDEF Quaternion QuaternionScale(Quaternion q, float mul) +{ + Quaternion result = { 0 }; + + float qax = q.x, qay = q.y, qaz = q.z, qaw = q.w; + + result.x = qax * mul + qaw * mul + qay * mul - qaz * mul; + result.y = qay * mul + qaw * mul + qaz * mul - qax * mul; + result.z = qaz * mul + qaw * mul + qax * mul - qay * mul; + result.w = qaw * mul - qax * mul - qay * mul - qaz * mul; + + return result; +} + +// Divide two quaternions +RMDEF Quaternion QuaternionDivide(Quaternion q1, Quaternion q2) +{ + Quaternion result = {q1.x / q2.x, q1.y / q2.y, q1.z / q2.z, q1.w / q2.w}; + return result; +} + // Calculate linear interpolation between two quaternions RMDEF Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount) {