summaryrefslogtreecommitdiff
path: root/src/Math
diff options
context:
space:
mode:
authorMel <einebeere@gmail.com>2022-10-26 04:05:47 +0200
committerMel <einebeere@gmail.com>2022-10-26 04:05:47 +0200
commite66f7011fb23e3509ad95accec581f6269813266 (patch)
tree2535a617d10f76318dc4a3ae923258186fd9bac5 /src/Math
parentdc2af6a6fb7ae3cf1b9f917058889329d4652491 (diff)
downloadmeowcraft-e66f7011fb23e3509ad95accec581f6269813266.tar.zst
meowcraft-e66f7011fb23e3509ad95accec581f6269813266.zip
Fixed attribute double free
Diffstat (limited to 'src/Math')
-rw-r--r--src/Math/MVP.cpp20
-rw-r--r--src/Math/MVP.hpp3
2 files changed, 21 insertions, 2 deletions
diff --git a/src/Math/MVP.cpp b/src/Math/MVP.cpp
index de9f2ee..754c656 100644
--- a/src/Math/MVP.cpp
+++ b/src/Math/MVP.cpp
@@ -18,7 +18,7 @@ Matrix<4, 4> view(Vector<3> position, Rotation angles) {
return rotation * transformation;
}
-Matrix<4, 4> projection(float aspect, float fov, float near, float far) {
+Matrix<4, 4> perspective_projection(float aspect, float fov, float near, float far) {
auto fov_radians = Math::radians(fov);
float x_scale = 1.0f / (tan(fov_radians / 2.0f) * aspect);
@@ -38,4 +38,22 @@ Matrix<4, 4> projection(float aspect, float fov, float near, float far) {
return projection;
}
+Matrix<4, 4> orthographic_projection(float width, float height, float near, float far) {
+ float x_scale = 2.0f / width;
+ float y_scale = 2.0f / -height;
+
+ float frustum_length = far - near;
+ float z_near = -(far + near) / frustum_length;
+ float z_far = -2 / frustum_length;
+
+ Matrix<4, 4> projection{
+ x_scale, 0.0f, 0.0f, -1.0f,
+ 0.0f, y_scale, 0.0f, 1.0f,
+ 0.0f, 0.0f, z_near, z_far,
+ 0.0f, 0.0f, 0.0f, 1.0f,
+ };
+
+ return projection;
+}
+
}
diff --git a/src/Math/MVP.hpp b/src/Math/MVP.hpp
index c3fb64f..0abad66 100644
--- a/src/Math/MVP.hpp
+++ b/src/Math/MVP.hpp
@@ -6,6 +6,7 @@ namespace Math::MVP {
Matrix<4, 4> model(Vector<3> position, Rotation angles);
Matrix<4, 4> view(Vector<3> position, Rotation angles);
-Matrix<4, 4> projection(float aspect, float fov, float near, float far);
+Matrix<4, 4> perspective_projection(float aspect, float fov, float near, float far);
+Matrix<4, 4> orthographic_projection(float width, float height, float near, float far);
}