New Scene struct

The scene is more than just a list of hittables. It's any and all
hittables (so the list, yeah), and also the camera(s!) in the world.

This doens't compile, however. More work will need to be done to
untangle the other things that could previously see these scattered
components.
This commit is contained in:
2023-09-23 14:40:34 -07:00
parent 7c43c3fb82
commit 60b4407573
2 changed files with 101 additions and 92 deletions

View File

@@ -4,7 +4,10 @@ mod renderer;
mod scene;
use crate::primitives::Vec3;
use crate::scene::Camera;
use crate::scene::{
Camera,
Scene
};
use crate::renderer::RenderCommand;
use rand::SeedableRng;
@@ -24,12 +27,9 @@ fn main() {
// random generator
let mut small_rng = SmallRng::seed_from_u64(0);
// world
let world = scene::random_scene(&mut small_rng);
// camera
let cam = Camera::new(
// Scene (now includes camera)
let scene = Scene {
camera: Camera::new(
Vec3::new(13.0, 2.0, 3.0), // lookfrom
Vec3::zero(), // lookat
Vec3::new(0.0, 1.0, 0.0), // vup
@@ -37,7 +37,9 @@ fn main() {
aspect_ratio,
0.1, // aperture
10.0, // dist_to_focus
);
),
world: Scene::random_world(&mut small_rng)
};
// render
// The render loop should now be a job submission mechanism

View File

@@ -228,7 +228,14 @@ impl Camera {
}
}
pub fn random_scene(srng: &mut SmallRng) -> Hittable {
pub struct Scene {
pub camera: Camera,
pub world: Hittable,
}
impl Scene {
pub fn random_world(srng: &mut SmallRng) -> Hittable {
let mat_ground = Material::Lambertian { albedo: Vec3::new(0.5, 0.5, 0.5) };
let mut world = Hittable::HittableList { hittables : Vec::<Hittable>::new() };
@@ -307,6 +314,6 @@ pub fn random_scene(srng: &mut SmallRng) -> Hittable {
radius: 1.0,
material: material3
});
return world;
world
}
}