1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#ifndef SSR_SHADER_MATH_H
#define SSR_SHADER_MATH_H
#include "../../math/structs.h"
/************************************************************************/
/* constants */
/************************************************************************/
#define SSR_PI 3.14159265359f
#define SSR_TWO_PI 6.28318530718f
#define SSR_FOUR_PI 12.56637061436f
#define SSR_INV_PI 0.31830988618f
#define SSR_INV_TWO_PI 0.15915494309f
#define SSR_INV_FOUR_PI 0.07957747155f
#define SSR_HALF_PI 1.57079632679f
#define SSR_INV_HALF_PI 0.636619772367f
/************************************************************************/
/* Vec3 */
/************************************************************************/
Vec2 vec2(float x, float y);
Vec2 vec2_minus(Vec2 v1, Vec2 v2);
Vec2 vec2_plus(Vec2 v1, Vec2 v2);
float vec2_dot(Vec2 v1, Vec2 v2);
/************************************************************************/
/* Vec3 */
/************************************************************************/
Vec3 vec3(float x, float y, float z);
Vec3 vec3_minus(Vec3 v1, Vec3 v2);
Vec3 vec3_plus(Vec3 v1, Vec3 v2);
float vec3_dot(Vec3 v1, Vec3 v2);
Vec3 vec3_cross(Vec3 v1, Vec3 v2);
Vec3 vec3_lerp(Vec3 v1, Vec3 v2, float t);
Vec3 vec3_slerp(Vec3 v1, Vec3 v2, float t);
Vec3 vec3_scale(Vec3 v, float scale);
Vec3 vec3_normalize(Vec3 v);
/************************************************************************/
/* Vec4 */
/************************************************************************/
Vec4 vec4(float x, float y, float z, float w);
Vec4 vec4_minus(Vec4 v1, Vec4 v2);
Vec4 vec4_plus(Vec4 v1, Vec4 v2);
Vec4 vec4_scale(Vec4 v, float scale);
Vec4 vec4_saturate(Vec4 v);
Vec4 vec4_normalize(Vec4 v);
/************************************************************************/
/* Matrix */
/************************************************************************/
Mat3 mat3(Vec3 colum1, Vec3 colum2, Vec3 colum3); // colum major
Vec3 mat3_mulvec3(Mat3 m, Vec3 v);
Mat3 mat3_mulmat3(Mat3 m, Mat3 m2);
Mat4 mat4(Vec4 colum1, Vec4 colum2, Vec4 colum3, Vec4 colum4);
Vec3 mat4_mulvec3(Mat4 m, Vec3 v);
Vec4 mat4_mulvec4(Mat4 m, Vec4 v);
Mat4 mat4_mulmat4(Mat4 m, Mat4 m2);
#endif
|