Add perspective projection support
This commit is contained in:
		| @@ -204,7 +204,8 @@ bool init_render(Arena *arena, Render *render, u64 width, u64 height) { | |||||||
| } | } | ||||||
|  |  | ||||||
| void render_model(const Model *model, Render *render, Colour colour, | void render_model(const Model *model, Render *render, Colour colour, | ||||||
|                   RenderType type, ColourType colour_type) { |                   RenderType type, ColourType colour_type, | ||||||
|  |                   ProjectionType projection) { | ||||||
|   Triangle triangle; |   Triangle triangle; | ||||||
|  |  | ||||||
|   for (u64 i = 0; i < model->triangles->count; ++i) { |   for (u64 i = 0; i < model->triangles->count; ++i) { | ||||||
| @@ -215,12 +216,13 @@ void render_model(const Model *model, Render *render, Colour colour, | |||||||
|                         .b = rand() % UINT8_MAX, |                         .b = rand() % UINT8_MAX, | ||||||
|                         .a = 255}; |                         .a = 255}; | ||||||
|     } |     } | ||||||
|     render_triangle(&triangle, model, render, colour, type); |     render_triangle(&triangle, model, render, colour, type, projection); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| internal void render_triangle(const Triangle *triangle, const Model *model, | internal void render_triangle(const Triangle *triangle, const Model *model, | ||||||
|                               Render *render, Colour colour, RenderType type) { |                               Render *render, Colour colour, RenderType type, | ||||||
|  |                               ProjectionType projection) { | ||||||
|   Image *img = &(render->img); |   Image *img = &(render->img); | ||||||
|   Vertex vertices[TRIANGLE_VERTICES] = { |   Vertex vertices[TRIANGLE_VERTICES] = { | ||||||
|       list_get(model->vertices, triangle->p0), |       list_get(model->vertices, triangle->p0), | ||||||
|   | |||||||
							
								
								
									
										10
									
								
								src/obj.h
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/obj.h
									
									
									
									
									
								
							| @@ -47,6 +47,13 @@ typedef enum { | |||||||
|   COUNT_COLOUR_TYPE, |   COUNT_COLOUR_TYPE, | ||||||
| } ColourType; | } ColourType; | ||||||
|  |  | ||||||
|  | typedef enum { | ||||||
|  |   PROJECTION_TYPE_ORTHOGRAPHIC, | ||||||
|  |   PROJECTION_TYPE_PERSPECTIVE, | ||||||
|  |  | ||||||
|  |   COUNT_PROJECTION_TYPE, | ||||||
|  | } ProjectionType; | ||||||
|  |  | ||||||
| MAKE_LIST_TYPE(Vertex); | MAKE_LIST_TYPE(Vertex); | ||||||
| MAKE_LIST_TYPE(TexCoord); | MAKE_LIST_TYPE(TexCoord); | ||||||
| MAKE_LIST_TYPE(Triangle); | MAKE_LIST_TYPE(Triangle); | ||||||
| @@ -68,6 +75,7 @@ struct render { | |||||||
| Model load_obj_file(Arena *arena, const char *filename, const char *texture); | Model load_obj_file(Arena *arena, const char *filename, const char *texture); | ||||||
| bool init_render(Arena *arena, Render *render, u64 width, u64 height); | bool init_render(Arena *arena, Render *render, u64 width, u64 height); | ||||||
| void render_model(const Model *model, Render *render, Colour colour, | void render_model(const Model *model, Render *render, Colour colour, | ||||||
|                   RenderType type, ColourType colour_type); |                   RenderType type, ColourType colour_type, | ||||||
|  |                   ProjectionType projection); | ||||||
|  |  | ||||||
| #endif // OBJ_H | #endif // OBJ_H | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user