Randomise scene

This commit is contained in:
Camden Dixie O'Brien
2025-09-22 22:00:43 +01:00
parent 4062285bb7
commit 1ee0571178
3 changed files with 66 additions and 33 deletions

View File

@@ -9,7 +9,14 @@
#define M_PI 3.14159265258979323846264
#endif
static uint32_t next(rng_t *rng)
rng_t rng_init(unsigned seed)
{
struct timeval tv;
gettimeofday(&tv, nullptr);
return (rng_t) { .state = tv.tv_usec + seed };
}
uint32_t rng_uint32(rng_t *rng)
{
uint32_t x = rng->state;
x ^= x << 13;
@@ -18,26 +25,19 @@ static uint32_t next(rng_t *rng)
return rng->state = x;
}
static double disc(rng_t *rng)
double rng_canon(rng_t *rng)
{
return (double)rng_uint32(rng) / (double)UINT32_MAX;
}
double rng_disc(rng_t *rng)
{
return 2.0 * rng_canon(rng) - 1.0;
}
rng_t rng_init(unsigned seed)
{
struct timeval tv;
gettimeofday(&tv, nullptr);
return (rng_t) { .state = tv.tv_usec + seed };
}
double rng_canon(rng_t *rng)
{
return (double)next(rng) / (double)UINT32_MAX;
}
vec3_t rng_vec3(rng_t *rng)
{
const vec3_t v = { disc(rng), disc(rng), disc(rng) };
const vec3_t v = { rng_disc(rng), rng_disc(rng), rng_disc(rng) };
return vec3_unit(v);
}