* | |
* |________|
*/
-static void world_gen_add_blob( world_instance *world,
+static void world_gen_add_blob( vg_rand *rand, world_instance *world,
scene_context *scene, ray_hit *hit )
{
m4x3f transform;
float angle = v3_dot(hit->normal,(v3f){0.0f,1.0f,0.0f});
q_axis_angle( qsurface, axis, angle );
- q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf64()*VG_TAUf );
+ q_axis_angle( qrandom, (v3f){0.0f,1.0f,0.0f}, vg_randf64(rand)*VG_TAUf );
q_mul( qsurface, qrandom, qsurface );
q_m3x3( qsurface, transform );
v3_copy( hit->pos, transform[3] );
float area = volume[0]*volume[2];
u32 particles = 0.08f * area;
- /* TODO: Quasirandom? */
vg_info( "Map area: %f. Max particles: %u\n", area, particles );
-
u64 t0 = SDL_GetPerformanceCounter();
#if 0
for( u32 i=0; i<particles; i++ ){
}
}
#else
+
+ vg_rand rand;
+ vg_rand_seed( &rand, 3030 );
const f32 tile_scale = 16.0f;
v2i tiles = { volume[0]/tile_scale, volume[2]/tile_scale };
for( i32 x=0; x<tiles[0]; x ++ ){
for( i32 z=0; z<tiles[1]; z ++ ){
for( u32 i=0; i<per_tile; i ++ ){
- v3f co = { (f32)x+vg_randf64(), 0.0f, (f32)z+vg_randf64() };
+ v3f co = { (f32)x+vg_randf64(&rand), 0, (f32)z+vg_randf64(&rand) };
v3_muls( co, tile_scale, co );
co[1] = 1000.0f;
v3_add( co, world->scene_geo.bbx[0], co );
struct world_surface *m1 = ray_hit_surface( world, &hit );
if((hit.normal[1] > 0.8f) && (m1 == mat) &&
(hit.pos[1] > 0.0f+10.0f)){
- world_gen_add_blob( world, scene, &hit );
+ world_gen_add_blob( &rand, world, scene, &hit );
count ++;
}
}