icubes_max[i] = cubes_max[i];
}
+ v3f cube_size;
+
v3i icubes_count;
v3i_sub( icubes_max, icubes_min, icubes_count );
for( int i=0; i<3; i++ ){
- icubes_count[i] = VG_MIN( 128, icubes_count[i]+1 );
- cubes_max[i] = icubes_min[i] + icubes_count[i];
+ int clamped_count = VG_MIN( 128, icubes_count[i]+1 );
+ float clamped_max = icubes_min[i] + clamped_count,
+ max = icubes_min[i] + icubes_count[i]+1;
+
+ icubes_count[i] = clamped_count;
+ cube_size[i] = (max / clamped_max) * k_light_cube_size;
+ cubes_max[i] = clamped_max;
}
- v3_muls( cubes_min, k_light_cube_size, cubes_min );
- v3_muls( cubes_max, k_light_cube_size, cubes_max );
+ v3_mul( cubes_min, cube_size, cubes_min );
+ v3_mul( cubes_max, cube_size, cubes_max );
for( int i=0; i<3; i++ ){
float range = cubes_max[i]-cubes_min[i];
vg_info( "Computing light cubes (%d) [%f %f %f] -> [%f %f %f]\n",
total_cubes, cubes_min[0], -cubes_min[2], cubes_min[1],
cubes_max[0], -cubes_max[2], cubes_max[1] );
-
v3_copy( cubes_min, world->ub_lighting.g_cube_min );
- v3f cube_size;
- v3_div( (v3f){1.0f,1.0f,1.0f}, world->ub_lighting.g_cube_inv_range,
- cube_size );
float bound_radius = v3_length( cube_size );
for( int iz = 0; iz<icubes_count[2]; iz ++ ){
/* colour + night */
v3_muls( light->colour, light->colour[3] * 2.0f, light_dst[i*3+0] );
- light_dst[i*3+0][3] = -1.0f;
+ light_dst[i*3+0][3] = 2.0f;
if( !light->daytime ){
- u32 hash = (i * 29986577) & 0xff;
+ u32 hash = (i * 29986577u) & 0xffu;
float switch_on = hash;
switch_on *= (1.0f/255.0f);