From 5d48f61406e64be84e126f5212275908e71ac290 Mon Sep 17 00:00:00 2001 From: Camden Dixie O'Brien Date: Tue, 23 Sep 2025 15:36:08 +0100 Subject: [PATCH] Implement RNG module --- CMakeLists.txt | 1 + demo.c | 5 +++++ include/rng.h | 11 +++++++++++ src/rng.c | 23 +++++++++++++++++++++++ 4 files changed, 40 insertions(+) create mode 100644 include/rng.h create mode 100644 src/rng.c diff --git a/CMakeLists.txt b/CMakeLists.txt index b7eb995..c1488c0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -12,6 +12,7 @@ add_library(batomorph src/camera.c src/ff.c src/obj.c + src/rng.c src/vec3.c ) configure_target(batomorph) diff --git a/demo.c b/demo.c index 15bd1a5..7ec8c1d 100644 --- a/demo.c +++ b/demo.c @@ -1,6 +1,7 @@ #include "camera.h" #include "ff.h" #include "obj.h" +#include "rng.h" #include @@ -23,9 +24,13 @@ static pix_t pixbuf[W * H]; int main() { + rng_init(); + img_t img = { .pix = pixbuf }; camera_t camera = camera_init(camera_pos, FOCAL_LEN, VIEWPORT_H, W, H); camera_render(&camera, scene, NELEMS(scene), &img); + ff_write(STDOUT_FILENO, img); + return 0; } diff --git a/include/rng.h b/include/rng.h new file mode 100644 index 0000000..17fda3c --- /dev/null +++ b/include/rng.h @@ -0,0 +1,11 @@ +#ifndef RNG_H +#define RNG_H + +#include "vec3.h" + +void rng_init(); + +double rng_double(); +vec3_t rng_vec3(); + +#endif diff --git a/src/rng.c b/src/rng.c new file mode 100644 index 0000000..5bd179e --- /dev/null +++ b/src/rng.c @@ -0,0 +1,23 @@ +#include "rng.h" + +#include +#include +#include + +void rng_init() +{ + struct timeval tv; + gettimeofday(&tv, NULL); + srand(tv.tv_usec); +} + +double rng_double() +{ + return 2.0 * (double)rand() / (double)INT_MAX - 1.0; +} + +vec3_t rng_vec3() +{ + const vec3_t v = { rng_double(), rng_double(), rng_double() }; + return vec3_unit(v); +}