1 static inline void cgm_wcons(cgm_vec4 *v, float x, float y, float z, float w)
9 static inline void cgm_wadd(cgm_vec4 *a, const cgm_vec4 *b)
17 static inline void cgm_wsub(cgm_vec4 *a, const cgm_vec4 *b)
25 static inline void cgm_wmul(cgm_vec4 *a, const cgm_vec4 *b)
33 static inline void cgm_wscale(cgm_vec4 *v, float s)
41 static inline void cgm_wmul_m4v4(cgm_vec4 *v, const float *m)
43 float x = v->x * m[0] + v->y * m[4] + v->z * m[8] + v->w * m[12];
44 float y = v->x * m[1] + v->y * m[5] + v->z * m[9] + v->w * m[13];
45 float z = v->x * m[2] + v->y * m[6] + v->z * m[10] + v->w * m[14];
46 v->w = v->x * m[3] + v->y * m[7] + v->z * m[11] + v->w * m[15];
52 static inline void cgm_wmul_v4m4(cgm_vec4 *v, const float *m)
54 float x = v->x * m[0] + v->y * m[1] + v->z * m[2] + v->w * m[3];
55 float y = v->x * m[4] + v->y * m[5] + v->z * m[6] + v->w * m[7];
56 float z = v->x * m[8] + v->y * m[9] + v->z * m[10] + v->w * m[11];
57 v->w = v->x * m[12] + v->y * m[13] + v->z * m[14] + v->w * m[15];
63 static inline void cgm_wmul_m34v4(cgm_vec4 *v, const float *m)
65 float x = v->x * m[0] + v->y * m[4] + v->z * m[8] + v->w * m[12];
66 float y = v->x * m[1] + v->y * m[5] + v->z * m[9] + v->w * m[13];
67 v->z = v->x * m[2] + v->y * m[6] + v->z * m[10] + v->w * m[14];
72 static inline void cgm_wmul_v4m43(cgm_vec4 *v, const float *m)
74 float x = v->x * m[0] + v->y * m[1] + v->z * m[2] + v->w * m[3];
75 float y = v->x * m[4] + v->y * m[5] + v->z * m[6] + v->w * m[7];
76 v->z = v->x * m[8] + v->y * m[9] + v->z * m[10] + v->w * m[11];
81 static inline void cgm_wmul_m3v4(cgm_vec4 *v, const float *m)
83 float x = v->x * m[0] + v->y * m[4] + v->z * m[8];
84 float y = v->x * m[1] + v->y * m[5] + v->z * m[9];
85 v->z = v->x * m[2] + v->y * m[6] + v->z * m[10];
90 static inline void cgm_wmul_v4m3(cgm_vec4 *v, const float *m)
92 float x = v->x * m[0] + v->y * m[1] + v->z * m[2];
93 float y = v->x * m[4] + v->y * m[5] + v->z * m[6];
94 v->z = v->x * m[8] + v->y * m[9] + v->z * m[10];
99 static inline float cgm_wlength(const cgm_vec4 *v)
101 return sqrt(v->x * v->x + v->y * v->y + v->z * v->z + v->w * v->w);
104 static inline float cgm_wlength_sq(const cgm_vec4 *v)
106 return v->x * v->x + v->y * v->y + v->z * v->z + v->w * v->w;
109 static inline float cgm_wdist(const cgm_vec4 *a, const cgm_vec4 *b)
111 float dx = a->x - b->x;
112 float dy = a->y - b->y;
113 float dz = a->z - b->z;
114 float dw = a->w - b->w;
115 return sqrt(dx * dx + dy * dy + dz * dz + dw * dw);
118 static inline float cgm_wdist_sq(const cgm_vec4 *a, const cgm_vec4 *b)
120 float dx = a->x - b->x;
121 float dy = a->y - b->y;
122 float dz = a->z - b->z;
123 float dw = a->w - b->w;
124 return dx * dx + dy * dy + dz * dz + dw * dw;
127 static inline void cgm_wnormalize(cgm_vec4 *v)
129 float len = cgm_wlength(v);
131 float s = 1.0f / len;
139 static inline void cgm_wlerp(cgm_vec4 *res, const cgm_vec4 *a, const cgm_vec4 *b, float t)
141 res->x = a->x + (b->x - a->x) * t;
142 res->y = a->y + (b->y - a->y) * t;
143 res->z = a->z + (b->z - a->z) * t;
144 res->w = a->w + (b->w - a->w) * t;