commit 9bb9a98cfb4d4c7dd589fefe255955fedeeeede8
parent c83abc7d1c98908d2de62e8b0b53a624cead465a
Author: Matsuda Kenji <info@mtkn.jp>
Date: Thu, 29 Jun 2023 07:56:37 +0900
add orthogonal projection
Diffstat:
3 files changed, 24 insertions(+), 1 deletion(-)
diff --git a/glm.c b/glm.c
@@ -171,6 +171,27 @@ matMakePers(float fov, float aspect, float near, float far)
return m;
}
+mat *
+matMakeOrth(float minx, float maxx, float miny, float maxy, float near,
+ float far)
+{
+ mat *m = (mat *)malloc(sizeof(mat));
+ m->data = (float *)calloc(sizeof(float), 16);
+
+ m->data[0] = 2 / (maxx - minx);
+ m->data[12] = -(maxx + minx) / (maxx - minx);
+ m->data[5] = 2 / (maxy - miny);
+ m->data[13] = -(maxy + miny) / (maxy - miny);
+ m->data[10] = -2 / (far - near);
+ m->data[14] = -(far + near) / (far - near);
+ m->data[15] = 1;
+
+ m->size = 4;
+ numMat++;
+ return m;
+}
+
+
void
matFree(mat *m)
diff --git a/glm.h b/glm.h
@@ -31,6 +31,8 @@ char *matStr(char *s, mat *m);
mat *matMake(float *data, int size);
mat *matMakeIdent(int size);
mat *matMakePers(float fov, float aspect, float near, float far);
+mat *matMakeOrth(float minx, float maxx, float miny, float maxy, float near,
+ float far);
void matFree(mat *m);
mat *matDot(mat *m, const mat *n);
int matCount(void);
diff --git a/main.c b/main.c
@@ -110,7 +110,7 @@ main(void)
mat *viewMat = matMakeIdent(4);
mat *projMat = matMakePers((float)M_PI/4, (float)width/(float)height,
0.1, 100.0);
-
+
vec *axis0 = vecMake((float[]){1.41421356/2, 1.41421356/2, 0.0}, 3);
vec *axis1 = vecMake((float[]){0.0, 0.0, 1.0}, 3);