4 #define YM_PI 3.14159265358979323846f 5 #define YM_DEG_TO_RAD(deg) (deg * YM_PI / 180.0f) 6 #define YM_RAD_TO_DEG(rad) (180.0f * rad / YM_PI) 70 for (
int i = 0; i < 4; i++)
72 for (
int j = 0; j < 4; j++)
74 res.
val[i * 4 + j] = 0;
75 for (
int k = 0; k < 4; k++)
76 res.
val[i * 4 + j] += lhs.
val[i * 4 + k] * rhs.
val[k * 4 + j];
87 for (
int i = 0; i < 3; i++)
89 for (
int j = 0; j < 3; j++)
91 res.
val[i * 3 + j] = 0;
92 for (
int k = 0; k < 3; k++)
93 res.
val[i * 3 + j] += lhs.
val[i * 3 + k] * rhs.
val[k * 3 + j];
104 for (
int i = 0; i < 4; i++)
107 for (
int j = 0; j < 4; j++)
108 res.
val[i] += lhs.
val[i * 4 + j] * rhs.
val[j];
119 for (
int i = 0; i < 3; i++)
122 for (
int j = 0; j < 3; j++)
123 res.
val[i] += lhs.
val[i * 3 + j] * rhs.
val[j];
172 1.0f, 0.0f, 0.0f, 0.0f,
173 0.0f, 1.0f, 0.0f, 0.0f,
174 0.0f, 0.0f, 1.0f, 0.0f,
175 vec.
x, vec.
y, vec.
z, 1.0f,
190 vec.
x, 0.0f, 0.0f, 0.0f,
191 0.0f, vec.
y, 0.0f, 0.0f,
192 0.0f, 0.0f, vec.
z, 0.0f,
193 0.0f, 0.0f, 0.0f, 1.0f,
227 .
x = target_pos.
x - camera_pos.
x,
228 .y = target_pos.
y - camera_pos.
y,
229 .z = target_pos.
z - camera_pos.
z,
233 float magn = sqrtf(distance.
x * distance.
x +
234 distance.
y * distance.
y +
235 distance.
z * distance.
z);
244 .
x = distance.
y * up_direction.
z - distance.
z * up_direction.
y,
245 .y = distance.
z * up_direction.
x - distance.
x * up_direction.
z,
246 .z = distance.
x * up_direction.
y - distance.
y * up_direction.
x,
254 r.
x, up_direction.
x, -distance.
x, 0.0f,
255 r.
y, up_direction.
y, -distance.
y, 0.0f,
256 r.
z, up_direction.
z, -distance.
z, 0.0f,
257 0.0f, 0.0f, 0.0f, 1.0f,
269 float range = tanf(fov * 0.5f) * near;
270 float sx = (2.0f * near) / (range * aspect + range * aspect);
271 float sy = near / range;
272 float sz = -(far + near) / (far - near);
273 float pz = -(2 * far * near) / (far - near);
279 sx, 0.0f, 0.0f, 0.0f,
280 0.0f, sy, 0.0f, 0.0f,
281 0.0f, 0.0f, sz, -1.0f,
282 0.0f, 0.0f, pz, 0.0f,
293 for (
int i = 0; i < 3; i++)
295 for (
int j = 0; j < 3; j++)
296 printf(
"%f ", mat.
val[i * 3 + j]);
float z
Definition: ym_math.h:37
float z
Definition: ym_math.h:23
#define YM_INLINE
YM_INLINE is a platform independent macro that forces a function to be inlined.
Definition: ym_attributes.h:31
float w
Definition: ym_math.h:38
float val[9]
Definition: ym_math.h:46
YM_INLINE ym_vec4 ym_mul_mat4_vec4(ym_mat4 lhs, ym_vec4 rhs)
Definition: ym_math.h:101
float y
Definition: ym_math.h:36
float val[3]
Definition: ym_math.h:18
YM_INLINE void ym_print_mat3(ym_mat3 mat)
Definition: ym_math.h:291
YM_INLINE ym_mat4 ym_lookat(ym_vec4 camera_pos, ym_vec4 target_pos, ym_vec4 up_direction)
Definition: ym_math.h:203
YM_INLINE ym_mat4 ym_project(float near, float far, float fov, float aspect)
Definition: ym_math.h:267
YM_INLINE ym_mat4 ym_mul_mat4_mat4(ym_mat4 lhs, ym_mat4 rhs)
Definition: ym_math.h:67
YM_INLINE ym_mat4 ym_translate_vec4(ym_vec4 vec)
Definition: ym_math.h:166
float x
Definition: ym_math.h:10
float x
Definition: ym_math.h:21
float y
Definition: ym_math.h:22
YM_INLINE ym_mat3 ym_mul_mat3_mat3(ym_mat3 lhs, ym_mat3 rhs)
Definition: ym_math.h:84
YM_INLINE ym_mat3 ym_scale_vec3(ym_vec3 vec)
Definition: ym_math.h:148
float val[4]
Definition: ym_math.h:32
YM_INLINE ym_vec3 ym_mul_mat3_vec3(ym_mat3 lhs, ym_vec3 rhs)
Definition: ym_math.h:116
YM_INLINE ym_mat3 ym_translate_vec3(ym_vec3 vec)
Definition: ym_math.h:131
float val[16]
Definition: ym_math.h:51
float x
Definition: ym_math.h:35
YM_INLINE ym_mat4 ym_scale_vec4(ym_vec4 vec)
Definition: ym_math.h:184
float y
Definition: ym_math.h:11