From 6ca75e5d27980e082d977ffdb9a93589b55961ce Mon Sep 17 00:00:00 2001 From: Julian T Date: Sun, 22 Mar 2020 18:44:26 +0100 Subject: Added container allowing scatic allocation of all the scene data. This will make porting to arduino alot easier --- main.c | 111 +++++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 59 insertions(+), 52 deletions(-) (limited to 'main.c') diff --git a/main.c b/main.c index 78117d5..1ea89fa 100644 --- a/main.c +++ b/main.c @@ -10,63 +10,70 @@ #define TESTW 1000 #define TESTH 1000 +char container[ CONTAINER_SIZE(5, 4, 1) ]; + int main() { - //printf("Starting\n"); - space_t s; - s.objects = NULL; - s.lights = NULL; - color_set(&s.ambient, 0.09, 0.09, 0.09); - // Currently havin issues with white background - // color_set(&s.back, 255, 255, 255); - color_set(&s.back, 0.8, 0.8, 0.8); - color_set(&s.env_color, 0.13, 0.13, 0.13); - s.env_samples = 256; - - material_t m; - vector_set(&m.color, 0.4, 0.4, 1); - m.defuse = 1; - m.specular = 0.0; - m.shine = 80; - m.reflective = 0.0; - - material_t m3; - vector_set(&m3.color, 1, 0.3, 0.1); - m3.defuse = 0.95; - m3.specular = 0.0; - m3.shine = 80; - m3.reflective = 0.05; - - material_t m2; - vector_set(&m2.color, 1, 1, 1); - m2.defuse = 0.0; - m2.specular = 0.5; - m2.shine = 80; - m2.reflective = 1; - - material_t mpl; + + container_t *cont = (container_t *) container; + container_init(cont, 5, 4, 1); + + // Init space_t + space_t *s = container_prepare_space(cont);; + + // Set space options + color_set(&s->ambient, 0.09, 0.09, 0.09); + color_set(&s->back, 0.8, 0.8, 0.8); + color_set(&s->env_color, 0.13, 0.13, 0.13); + s->env_samples = 16; + + // Set viewpoint options + vector_set(&s->view.position, 0, 16, 6); + vector_set(&s->view.target, 0, 0, 6); + s->view.width = TESTW; + s->view.height = TESTH; + + // Create materials + material_t *m = add_material(cont); + vector_set(&m->color, 0.4, 0.4, 1); + m->defuse = 1; + m->specular = 0.0; + m->shine = 80; + m->reflective = 0.0; + + material_t *m3 = add_material(cont); + vector_set(&m3->color, 1, 0.3, 0.1); + m3->defuse = 0.95; + m3->specular = 0.0; + m3->shine = 80; + m3->reflective = 0.05; + + material_t *m2 = add_material(cont); + vector_set(&m2->color, 1, 1, 1); + m2->defuse = 0.0; + m2->specular = 0.5; + m2->shine = 80; + m2->reflective = 1; + + material_t *mpl = add_material(cont); //vector_set(&mpl.color, 0, 0.396, 0.7019); - vector_set(&mpl.color, 1, 1, 1); - mpl.defuse = 1; - mpl.specular = 0.0; - mpl.shine = 50; - mpl.reflective = 0.0; - - vector_set(&s.view.position, 0, 16, 6); - vector_set(&s.view.target, 0, 0, 6); - s.view.width = TESTW; - s.view.height = TESTH; - - viewpoint_init(&s.view); + vector_set(&mpl->color, 1, 1, 1); + mpl->defuse = 1; + mpl->specular = 0.0; + mpl->shine = 50; + mpl->reflective = 0.0; + + + viewpoint_init(&s->view); // Setup plane - add_sphere(&s, vector_set(NULL, 0, 4, 7), 5, &m2); - add_sphere(&s, vector_set(NULL, 8, 8, 4), 2, &m3); - add_sphere(&s, vector_set(NULL, -10, 9, 5), 3, &m); - add_sphere(&s, vector_set(NULL, -10, -5, 5), 3, &m); - add_plane(&s, vector_set(NULL, 0, 0, 2), vector_set(NULL, 0, 0, 1), &mpl); + add_sphere(cont, vector_set(NULL, 0, 4, 7), 5, m2); + add_sphere(cont, vector_set(NULL, 8, 8, 4), 2, m3); + add_sphere(cont, vector_set(NULL, -10, 9, 5), 3, m); + add_sphere(cont, vector_set(NULL, -10, -5, 5), 3, m); + add_plane(cont, vector_set(NULL, 0, 0, 2), vector_set(NULL, 0, 0, 1), mpl); //add_plane(&s, vector_set(NULL, 0, -20, 0), vector_set(NULL, 0, 1, 0), &mpl); - add_light(&s, vector_set(NULL, 20, 10, 30), color_set(NULL, 0.3, 0.3, 0.3), color_set(NULL, 0.5, 0.5, 0.5)); + add_light(cont, vector_set(NULL, 20, 10, 30), color_set(NULL, 0.3, 0.3, 0.3), color_set(NULL, 0.5, 0.5, 0.5)); //add_light(&s, vector_set(NULL, 0, 10, 20), color_set(NULL, 0.5, 0.5, 0.5), color_set(NULL, 0.5, 0.5, 0.5)); pgm_write_header(stdout, TESTW, TESTH); @@ -77,7 +84,7 @@ int main() for (int y = TESTH; y; y--) { for (int x = TESTW; x; x--) { - color_t *c = ray_trace(&s, x, y, 2); + color_t *c = ray_trace(&cont->space, x, y, 2); if (c) { pgm_write_pixel(stdout, c); -- cgit v1.2.3