Refactor Renderer trait

This commit is contained in:
hal8174 2024-10-04 18:12:00 +02:00
parent 7d122d44b3
commit 7d38e87f6a
9 changed files with 228 additions and 172 deletions

View file

@ -1,13 +1,24 @@
use image::{ImageBuffer, ImageResult, Rgb};
use rand::{rngs::SmallRng, SeedableRng};
use ray_tracing_core::{camera::BasicCamera, prelude::*, renderer::ClassicalRenderer};
use ray_tracing_renderer::{path_tracer::PathTracer, path_tracer_importance::PathTracerImportance};
use ray_tracing_scene::{basic_scene::BasicScene, triangle_bvh::examples::cornel};
use ray_tracing_core::{
camera::{BasicCamera, Camera},
prelude::*,
renderer::ClassicalRenderer,
scene::Scene,
};
use ray_tracing_renderer::path_tracer_importance::PathTracerImportance;
use ray_tracing_scene::examples::basic_cornel;
use rayon::prelude::*;
use std::path::Path;
fn render_image<C: ClassicalRenderer<SmallRng> + Sync>(
renderer: C,
fn render_image<
R: ClassicalRenderer<SmallRng, S, C> + Sync,
S: Scene<SmallRng> + Sync,
C: Camera<SmallRng> + Sync,
>(
renderer: &R,
scene: &S,
camera: &C,
outputfilename: impl AsRef<Path>,
samples_per_pixel: usize,
) -> ImageResult<()> {
@ -19,7 +30,8 @@ fn render_image<C: ClassicalRenderer<SmallRng> + Sync>(
let mut rng = SmallRng::seed_from_u64((x + y * renderer.width()) as u64);
for _ in 0..samples_per_pixel {
*c += renderer.render_pixel(x, y, &mut rng) / (samples_per_pixel as Float);
*c +=
renderer.render_pixel(scene, camera, x, y, &mut rng) / (samples_per_pixel as Float);
}
});
@ -33,18 +45,18 @@ fn render_image<C: ClassicalRenderer<SmallRng> + Sync>(
fn main() -> ImageResult<()> {
// let s = BasicScene::new();
let s = cornel();
let s = basic_cornel();
let c = BasicCamera::new(
400,
400,
Pos3::new(-6.0, 0.0, 0.0),
Dir3::new(1.0, 0.0, 0.0),
Dir3::up(),
Float::to_radians(90.0),
s.camera_pos,
s.camera_dir,
s.camera_up,
s.horizontal_fov,
);
let r = PathTracerImportance::new(s, c);
let r = PathTracerImportance::new(400, 400);
render_image(r, "test.exr", 1048)
render_image(&r, &s.scene, &c, "test.exr", 1048)
}