]> git.lizzy.rs Git - shadowclad.git/blob - src/engine/geometry.h
Implement first stage of obstacle detection
[shadowclad.git] / src / engine / geometry.h
1 #ifndef ENGINE_GEOMETRY_H_
2 #define ENGINE_GEOMETRY_H_
3
4 #include <GL/gl.h>
5
6 typedef struct Vector Vector;
7 typedef struct Transform Transform;
8
9 struct Vector {
10         float x;
11         float y;
12         float z;
13 };
14
15 struct Transform {
16         GLfloat a1, a2, a3, a4;
17         GLfloat b1, b2, b3, b4;
18         GLfloat c1, c2, c3, c4;
19         GLfloat d1, d2, d3, d4;
20 };
21
22 static const float TAU = 6.28318530718f;
23
24 Transform identity();
25 Transform multiply(Transform t1, Transform t2);
26 void translate(Transform* transform, Vector vec);
27 void rotate(Transform* transform, Vector axis, float angle);
28 Vector addVectors(Vector v1, Vector v2);
29 Vector subtractVectors(Vector v1, Vector v2);
30 Vector crossProduct(Vector v1, Vector v2);
31 float dotProduct(Vector v1, Vector v2);
32 Vector scaleVector(Vector vec, float scale);
33 Vector growVectorNoFlip(Vector vec, float amount);
34 Vector clampMagnitude(Vector vec, float maxMagnitude);
35 float magnitude(Vector vec);
36 Vector applyTransform(Transform transform, Vector vec);
37 Vector translationOf(Transform transform);
38 Vector normalized(Vector vec);
39
40 #endif // ENGINE_GEOMETRY_H_