aboutsummaryrefslogtreecommitdiff
path: root/mons_3d/src/projection.c
diff options
context:
space:
mode:
Diffstat (limited to 'mons_3d/src/projection.c')
-rw-r--r--mons_3d/src/projection.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/mons_3d/src/projection.c b/mons_3d/src/projection.c
new file mode 100644
index 0000000..287d59e
--- /dev/null
+++ b/mons_3d/src/projection.c
@@ -0,0 +1,15 @@
+#include "projection.h"
+#include <math.h>
+#include "mons_math/mat4.h"
+
+mons_mat4 mons_projection_matrix(mons_projection projection) {
+ float tangent = tanf(projection.fov / 2.0f);
+ float top = projection.near * tangent;
+ float right = top * projection.aspect_ratio;
+ return (mons_mat4){
+ {projection.near / right, 0, 0, 0},
+ {0, projection.near / top, 0, 0},
+ {0, 0, -(projection.far + projection.near) / (projection.far - projection.near), -1},
+ {0, 0, -(2.0f * projection.far * projection.near) / (projection.far - projection.near), 0},
+ };
+}