59 lines
1.3 KiB
C
59 lines
1.3 KiB
C
#include "img.h"
|
|
#include "mem_arena.h"
|
|
#include "misc_utils.h"
|
|
#include "obj.h"
|
|
#include "render.h"
|
|
#include "shaders.h"
|
|
#include <stdbool.h>
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
#include <time.h>
|
|
|
|
#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;
|
|
}
|