Apply projection matrix last to allow for clipping
This commit is contained in:
parent
b7101108a4
commit
7823e92861
@ -59,8 +59,8 @@ typedef struct {
|
||||
} rasteriser_scene_t;
|
||||
|
||||
void render_scene(window_t *wnd, Arena *arena, const rasteriser_scene_t *scene);
|
||||
void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
|
||||
const instance_t *instance);
|
||||
void render_instance(window_t *wnd, Arena *arena, mat4x4f_t camera_matrix,
|
||||
mat3x4f_t projection_matrix, const instance_t *instance);
|
||||
void draw_wireframe_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
|
||||
void draw_filled_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
|
||||
void draw_shaded_triangle(window_t *wnd, Arena *arena, triangle_t triangle);
|
||||
|
@ -22,16 +22,15 @@ void render_scene(window_t *wnd, Arena *arena,
|
||||
inverse_camera_translation_matrix(scene->camera);
|
||||
mat4x4f_t cam_matrix =
|
||||
mul_mat4x4f(cam_inverse_rotation, cam_inverse_translation);
|
||||
mat3x4f_t proj_cam_matrix =
|
||||
mul_mat3x4f_by_mat4x4f(*(scene->proj_matrix), cam_matrix);
|
||||
|
||||
for (u64 i = 0; i < scene->instance_count; ++i) {
|
||||
render_instance(wnd, arena, proj_cam_matrix, &(scene->instances[i]));
|
||||
render_instance(wnd, arena, cam_matrix, *(scene->proj_matrix),
|
||||
&(scene->instances[i]));
|
||||
}
|
||||
}
|
||||
|
||||
void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
|
||||
const instance_t *instance) {
|
||||
void render_instance(window_t *wnd, Arena *arena, mat4x4f_t camera_matrix,
|
||||
mat3x4f_t projection_matrix, const instance_t *instance) {
|
||||
list_vec2i_t *projected = list_create_with_capacity(
|
||||
vec2i_t, arena, instance->model->vertices->count * sizeof(vec3f_t));
|
||||
if (!projected) {
|
||||
@ -46,7 +45,9 @@ void render_instance(window_t *wnd, Arena *arena, mat3x4f_t proj_cam_mat,
|
||||
mat4x4f_t tr_mat = mul_mat4x4f(t_mat, r_mat);
|
||||
mat4x4f_t trs_mat = mul_mat4x4f(tr_mat, s_mat);
|
||||
|
||||
mat3x4f_t xf_proj_mat = mul_mat3x4f_by_mat4x4f(proj_cam_mat, trs_mat);
|
||||
mat4x4f_t xf_cam_mat = mul_mat4x4f(camera_matrix, trs_mat);
|
||||
|
||||
mat3x4f_t xf_proj_mat = mul_mat3x4f_by_mat4x4f(projection_matrix, xf_cam_mat);
|
||||
|
||||
vec3f_t vertex = {0};
|
||||
vec2i_t point = {0};
|
||||
|
Loading…
Reference in New Issue
Block a user