aboutsummaryrefslogtreecommitdiff
path: root/mons_3d/src/projection.c
blob: 287d59ea4f5577d2d21f91983a4f6f5d717c8ada (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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},
    };
}