Skip to content

Commit

Permalink
Merge branch 'emissive' into spheres_simd
Browse files Browse the repository at this point in the history
  • Loading branch information
bitshifter committed May 26, 2018
2 parents 9003a02 + 3746863 commit d129015
Show file tree
Hide file tree
Showing 4 changed files with 104 additions and 8 deletions.
6 changes: 3 additions & 3 deletions src/glium_window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -159,9 +159,9 @@ pub fn start_loop(params: Params, camera: Camera, scene: Scene, max_frames: Opti
let mut mapping = buffer_texture.map();
for (texel, rgb) in mapping.iter_mut().zip(rgb_buffer.iter()) {
*texel = (
(255.99 * rgb.0) as u8,
(255.99 * rgb.1) as u8,
(255.99 * rgb.2) as u8,
(255.99 * rgb.0).max(0.0) as u8,
(255.99 * rgb.1).max(0.0) as u8,
(255.99 * rgb.2).max(0.0) as u8,
255,
);
}
Expand Down
6 changes: 3 additions & 3 deletions src/math.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,9 +35,9 @@ pub fn random_unit_vector<T: Rng>(rng: &mut T) -> Vec3 {
pub fn linear_to_srgb(rgb: (f32, f32, f32)) -> (u8, u8, u8) {
let rgb = (rgb.0.max(0.0), rgb.1.max(0.0), rgb.2.max(0.0));
let srgb = (
(1.055 * rgb.0.powf(0.416_666_66) - 0.055).max(0.0),
(1.055 * rgb.1.powf(0.416_666_66) - 0.055).max(0.0),
(1.055 * rgb.2.powf(0.416_666_66) - 0.055).max(0.0),
(1.055 * rgb.0.powf(0.416_666_66) - 0.055).max(0.0).min(1.0),
(1.055 * rgb.1.powf(0.416_666_66) - 0.055).max(0.0).min(1.0),
(1.055 * rgb.2.powf(0.416_666_66) - 0.055).max(0.0).min(1.0),
);
(
(srgb.0 * 255.99) as u8,
Expand Down
98 changes: 97 additions & 1 deletion src/presets.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ pub fn from_name(name: &str, params: &Params) -> Option<(Scene, Camera)> {
"random" => Some(random(params)),
"small" => Some(small(params)),
"aras" => Some(aras_p(params)),
"smallpt" => Some(smallpt(params)),
_ => None,
}
}
Expand Down Expand Up @@ -185,11 +186,12 @@ pub fn aras_p(params: &Params) -> (Scene, Camera) {
let lookat = vec3(0.0, 0.0, 0.0);
let dist_to_focus = 3.0;
let aperture = 0.02;
let fov = 60.0;
let camera = Camera::new(
lookfrom,
lookat,
vec3(0.0, 1.0, 0.0),
60.0,
fov,
params.width as f32 / params.height as f32,
aperture,
dist_to_focus,
Expand Down Expand Up @@ -590,3 +592,97 @@ pub fn aras_p(params: &Params) -> (Scene, Camera) {
let scene = Scene::new(&spheres);
(scene, camera)
}

pub fn smallpt(params: &Params) -> (Scene, Camera) {
let lookfrom = vec3(50.0, 52.0, 295.6);
let lookat = vec3(50.0, 33.0, 0.0);
let dist_to_focus = 100.0;
let aperture = 0.05;
let fov = 30.0;
let camera = Camera::new(
lookfrom,
lookat,
vec3(0.0, 1.0, 0.0),
fov,
params.width as f32 / params.height as f32,
aperture,
dist_to_focus,
);

let spheres = [
sphere(
vec3(1e3 + 1.0, 40.8, 81.6),
1e3,
MaterialKind::Lambertian {
albedo: vec3(0.75, 0.25, 0.25),
},
None,
), //Left
sphere(
vec3(-1e3 + 99.0, 40.8, 81.6),
1e3,
MaterialKind::Lambertian {
albedo: vec3(0.25, 0.25, 0.75),
},
None,
), //Rght
sphere(
vec3(50.0, 40.8, 1e3),
1e3,
MaterialKind::Lambertian {
albedo: vec3(0.75, 0.75, 0.75),
},
None,
), //Back
// sphere(
// vec3(50.0, 40.8, -1e3 + 300.0),
// 1e3,
// MaterialKind::Lambertian {
// albedo: vec3(0.1, 0.1, 0.1),
// },
// None,
// ), //Frnt
sphere(
vec3(50.0, 1e3, 81.6),
1e3,
MaterialKind::Lambertian {
albedo: vec3(0.75, 0.75, 0.75),
},
None,
), //Botm
sphere(
vec3(50.0, -1e3 + 81.6, 81.6),
1e3,
MaterialKind::Lambertian {
albedo: vec3(0.75, 0.75, 0.75),
},
None,
), //Top
sphere(
vec3(27.0, 16.5, 47.0),
16.5,
MaterialKind::Metal {
albedo: vec3(1.0, 1.0, 1.0) * 0.999,
fuzz: 0.0,
},
None,
), //Mirr
sphere(
vec3(73.0, 16.5, 78.0),
16.5,
MaterialKind::Dielectric { ref_idx: 1.5 },
None,
), //Glas
sphere(
vec3(50.0, 81.6 - 16.5, 81.6),
1.5,
MaterialKind::Lambertian {
albedo: vec3(0.0, 0.0, 0.0),
},
Some(vec3(4.0, 4.0, 4.0) * 100.0),
), //Lite
];

let scene = Scene::new(&spheres);
(scene, camera)
}
2 changes: 1 addition & 1 deletion src/scene.rs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ impl Scene {
XorShiftRng::from_seed([state, state, state, state])
};
row.iter_mut().enumerate().for_each(|(i, color_out)| {
let mut col = vec3(0.0, 0.0, 0.0);
let mut col = Vec3::zero();
for _ in 0..params.samples {
let u = (i as f32 + rng.next_f32()) * inv_nx;
let v = (j as f32 + rng.next_f32()) * inv_ny;
Expand Down

0 comments on commit d129015

Please sign in to comment.