From f848658aff3999ac72f0dc46bc51151ff90e4841 Mon Sep 17 00:00:00 2001 From: Anton Lydike Date: Thu, 23 Apr 2020 18:03:26 +0200 Subject: [PATCH] fixed some stuff --- main.c | 15 +++++++++------ march.out | Bin 85480 -> 91000 bytes marcher.h | 11 +++++++++-- src/point.c | 10 +++++----- src/scene.c | 9 ++++++++- 5 files changed, 31 insertions(+), 14 deletions(-) diff --git a/main.c b/main.c index 9a22d72..be0861d 100644 --- a/main.c +++ b/main.c @@ -20,7 +20,7 @@ Color circle_color(Point hit, Point direction, SceneObject *self) { Color color = self->color; if (angle > 90) angle = 180 - angle ; // clamp angle to 0-90 - color = color_mix(color, color_new(0,0,0), 1 - (angle / (double) 90)); + color = color_mix(color, color_new(0,0,0), 1 - (angle / (double) 120)); return color; } @@ -32,15 +32,18 @@ SceneObject circle_new(Point loc, double radius) { so.args[0] = radius; so.distance = circle_dist; so.get_color = circle_color; - so.color = color_new(255,0,0); + so.color = color_new(255,255,255); return so; } + + + int main(int argc, char* argv[]) { int threads = 1; Camera cam; cam.fov = 90; - camera_set_looking_at(&cam, pt_new(-.6,0,0), pt_new(-.5,1,0)); + camera_set_looking_at(&cam, pt_new(0,0,0), pt_new(1,1,1)); if (argc > 1) { threads = atoi(argv[1]); @@ -49,11 +52,11 @@ int main(int argc, char* argv[]) { printf("threads: %d\n", threads); // create basic scene with up to 10 objects - Scene scene = scene_new(800, 600, 10); - scene.max_steps = 64; + Scene scene = scene_new(1920, 1080, 10); + scene.max_steps = 256; scene.threshold = 0.02; - scene_add_obj(&scene, circle_new(pt_new(0,1,0), .2)); + scene_add_obj(&scene, circle_new(pt_new(1,1,1), .2)); //scene_add_obj(&scene, circle_new(pt_new(0,2,0), 0.5)); //scene_add_obj(&scene, circle_new(pt_new(0,-2,0), 0.5)); diff --git a/march.out b/march.out index 812fa0d473215c2e0f0fb9493af9764240a37ce3..21d7c3cd282f36dbf0b4993331f985b9fafe7774 100755 GIT binary patch literal 91000 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 delta 34154 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 K6+xV$*#8f{@?l2+ diff --git a/marcher.h b/marcher.h index 5a38355..69d906f 100644 --- a/marcher.h +++ b/marcher.h @@ -8,6 +8,12 @@ #define M_PI 3.14159265358979323846 #endif +struct __myvec; +struct __mymtrx; +struct __mycam; +struct __myobject; +struct __myscene; + typedef struct __myvec { double x; double y; @@ -19,10 +25,10 @@ typedef struct __mymtrx { } Matrix; inline Point pt_new(double x, double y, double z); -Point pt_scale(Point pt, double length); +inline Point pt_scale(Point pt, double length); inline Point pt_normalize(Point pt); inline double pt_length(Point pt); -void pt_add(Point* pt, Point add); +inline void pt_add(Point* pt, Point add); inline void pt_sub(Point* pt, Point sub); inline double pt_dist(Point p1, Point p2); inline Point pt_mod(Point pt, double mod); @@ -53,6 +59,7 @@ typedef struct __myobject { double (*distance)(Point, struct __myobject *); Color (*get_color)(Point, Point, struct __myobject *); Color color; + struct __myscene* scene; } SceneObject; typedef struct __myscene { diff --git a/src/point.c b/src/point.c index bfa2ecc..1324312 100644 --- a/src/point.c +++ b/src/point.c @@ -11,7 +11,7 @@ inline Point pt_new(double x, double y, double z) { } // scale vector to length -Point pt_scale(Point pt, double length) { +inline Point pt_scale(Point pt, double length) { double f = length / pt_length(pt); return pt_new( pt.x * f, @@ -42,7 +42,7 @@ inline double pt_length(Point pt) { } // add the vector add to the vector pt -void pt_add(Point* pt, Point add) { +inline void pt_add(Point* pt, Point add) { pt->x = pt->x + add.x; pt->y = pt->y + add.y; pt->z = pt->z + add.z; @@ -103,9 +103,9 @@ void pt_orthogonal_plane(Point pt, Point *span_z, Point *span_xy) { inline Point pt_mod(Point pt, double mod) { return pt_new( - fmod(pt.x, mod), - fmod(pt.y, mod), - fmod(pt.z, mod) + fabs(fmod(pt.x, mod)), + fabs(fmod(pt.y, mod)), + fabs(fmod(pt.z, mod)) ); } diff --git a/src/scene.c b/src/scene.c index b6367ef..493e440 100644 --- a/src/scene.c +++ b/src/scene.c @@ -28,7 +28,10 @@ void scene_add_obj(Scene* scene, SceneObject object) { if (scene->object_count >= scene->allocated_space) return; // limit reached // TODO realloc + scene->objects[scene->object_count] = object; + // link containing scene + scene->objects[scene->object_count].scene = scene; scene->object_count++; } @@ -102,7 +105,11 @@ Color march_ray(Point origin, Point direction, Scene* scene) { // check for a hit if (dist <= threshold) { // a hit! - return closest_obj->get_color(pos, direction, closest_obj); + double f = (steps / (double) scene->max_steps); + f = f * f * f * f; + + Color c = closest_obj->get_color(pos, direction, closest_obj); + return color_mix(c, color_new(0,0,0), f); } else { // a miss :(