#include "img.h" #include "mem_arena.h" #include "misc_utils.h" #include "obj.h" #include "render.h" #include "shaders.h" #include #include #include #include #define IMAGE_DIMENSION 1200 #define RESOURCE(NAME) "resources/" NAME enum { TINY_EXIT_SUCCESS, TINY_EXIT_ARENA_INIT_FAILED, TINY_EXIT_RENDER_INIT_FAILED, TINY_EXIT_MODEL_LOAD_FAILED, }; int main(void) { Arena *arena = NULL; if (!wapp_mem_arena_init(&arena, GB(10))) { return TINY_EXIT_ARENA_INIT_FAILED; } Colour bg = {.r = 42, .g = 45, .b = 52, .a = 255}; Colour teal = {.r = 14, .g = 156, .b = 208, .a = 255}; Render render; if (!init_render(arena, &render, IMAGE_DIMENSION, IMAGE_DIMENSION)) { return TINY_EXIT_RENDER_INIT_FAILED; } Model obj = load_obj_file(arena, RESOURCE("head.obj"), RESOURCE("head.pnm"), RESOURCE("head_nm.pnm")); if (IS_INVALID_MODEL(obj)) { return TINY_EXIT_MODEL_LOAD_FAILED; } PhongMaterial material = { .ambient = 0.3f, .diffuse = 1.5f, .specular = 0.5f, .shininess = 0.1f, }; obj.material = material; load_shaders(); clear_buffer(&(render.img), &bg); render_model(&obj, &render, perspective_phong, RENDER_TYPE_SHADED, teal); save_image(&(render.img), "result.pam"); wapp_mem_arena_destroy(&arena); return TINY_EXIT_SUCCESS; }