Some tries to fix normal directions
This commit is contained in:
parent
e3cb37817c
commit
637abb06ad
4 changed files with 21 additions and 14 deletions
|
@ -5,10 +5,10 @@ pub fn put_color(img: &mut RgbImage, pixel_color: &Color, x: u32, y: u32, sample
|
|||
let mut g = pixel_color.y();
|
||||
let mut b = pixel_color.z();
|
||||
|
||||
//let scale = 1.0 / samples_per_pixel as f64;
|
||||
//r = r/samples_per_pixel as f64; //(scale * r).sqrt();
|
||||
//g = g/samples_per_pixel as f64; //(scale * g).sqrt();
|
||||
//b = b/samples_per_pixel as f64; //(scale * b).sqrt();
|
||||
let scale = 1.0;// / samples_per_pixel as f64;
|
||||
r = (scale * r).sqrt();
|
||||
g = (scale * g).sqrt();
|
||||
b = (scale * b).sqrt();
|
||||
|
||||
img.put_pixel(
|
||||
x,
|
||||
|
|
|
@ -29,7 +29,8 @@ impl HittableList {
|
|||
|
||||
for obj in &self.objects {
|
||||
let mut temp_rec = HitRecord::empty();
|
||||
if obj.hit(&r, t_min, closest_so_far, &mut temp_rec) {
|
||||
if obj.hit(&r, t_min, closest_so_far, &mut temp_rec)
|
||||
&& closest_so_far > temp_rec.t {
|
||||
hit_anything = true;
|
||||
closest_so_far = temp_rec.t;
|
||||
*rec = temp_rec;
|
||||
|
|
16
src/main.rs
16
src/main.rs
|
@ -67,9 +67,9 @@ fn main() {
|
|||
|
||||
// Image
|
||||
let aspect_ratio = 10.0 / 7.5; //16.0 / 9.0;
|
||||
let image_width = 600;
|
||||
let image_width = 300;
|
||||
let image_height = (image_width as f64 / aspect_ratio) as u32;
|
||||
let samples_per_pixel = 50_u32;
|
||||
let samples_per_pixel = 1_u32;
|
||||
let max_depth = 50;
|
||||
let antialiasing_threshold = 0.2; // at what diff between two colors will a pixel be antialiased
|
||||
|
||||
|
@ -287,7 +287,7 @@ fn from_obj(path: &str) -> HittableList {
|
|||
// 118.0 / 255.0,
|
||||
//)));
|
||||
//let material = Arc::new(Dielectric::new(2.0));
|
||||
let material = Arc::new(Metal::new(&Color::new(0.7, 0.7, 0.8), 0.0));
|
||||
let material = Arc::new(Metal::new(&Color::new(0.7, 0.6, 0.5), 0.0));
|
||||
//let material = Arc::new(Rainbow::new());
|
||||
|
||||
let cornell_box = tobj::load_obj(path, &tobj::OFFLINE_RENDERING_LOAD_OPTIONS);
|
||||
|
@ -318,8 +318,8 @@ fn from_obj(path: &str) -> HittableList {
|
|||
|
||||
for v in 0..mesh.indices.len() / 3 {
|
||||
let index_a = mesh.indices[3 * v] as usize;
|
||||
let index_b = mesh.indices[3 * v + 1] as usize;
|
||||
let index_c = mesh.indices[3 * v + 2] as usize;
|
||||
let index_b = mesh.indices[3 * v + 2] as usize;
|
||||
let index_c = mesh.indices[3 * v + 1] as usize;
|
||||
let index_normal_a = mesh.normal_indices[3 * v] as usize;
|
||||
let index_normal_b = mesh.normal_indices[3 * v + 1] as usize;
|
||||
let index_normal_c = mesh.normal_indices[3 * v + 2] as usize;
|
||||
|
@ -327,16 +327,16 @@ fn from_obj(path: &str) -> HittableList {
|
|||
let normal_avg = Vec3::unit_vector(
|
||||
Vec3::new(
|
||||
mesh.positions[3 * index_normal_a] as f64,
|
||||
mesh.positions[3 * index_normal_a + 1] as f64,
|
||||
mesh.positions[3 * index_normal_a + 2] as f64,
|
||||
mesh.positions[3 * index_normal_a + 1] as f64,
|
||||
) + Vec3::new(
|
||||
mesh.positions[3 * index_normal_b] as f64,
|
||||
mesh.positions[3 * index_normal_b + 1] as f64,
|
||||
mesh.positions[3 * index_normal_b + 2] as f64,
|
||||
mesh.positions[3 * index_normal_b + 1] as f64,
|
||||
) + Vec3::new(
|
||||
mesh.positions[3 * index_normal_c] as f64,
|
||||
mesh.positions[3 * index_normal_c + 1] as f64,
|
||||
mesh.positions[3 * index_normal_c + 2] as f64,
|
||||
mesh.positions[3 * index_normal_c + 1] as f64,
|
||||
),
|
||||
);
|
||||
|
||||
|
|
|
@ -77,7 +77,13 @@ impl Material for Metal {
|
|||
*scattered = Ray::new(rec.p, reflected + self.fuzz * Vec3::random_in_unit_sphere());
|
||||
*attenuation = self.albedo.clone();
|
||||
|
||||
return true;//Vec3::dot(scattered.direction(), rec.normal) > 0.0;
|
||||
let reflect = Vec3::dot(scattered.direction(), rec.normal);
|
||||
//dbg!(reflect);
|
||||
|
||||
/*if reflect > 0.0 {
|
||||
*attenuation = Color::new(100.0, 0.0, 0.0);
|
||||
}*/
|
||||
return reflect > 0.0;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue