RTracer (Rust Tracer)

Getting Started

Example usage:

```rust use rtracer::datatypes::vector3::Vector3; use rtracer::datatypes::material::Material; use rtracer::utilities::framehandler::FrameHandler; use rtracer::datatypes::color::Color; use rtracer::datatypes::vector2d::Vector2D; use rtracer::spacial::scene::Scene; use rtracer::spacial::camera::Camera; use rtracer::spacial::meshobject::MeshObject; use rtracer::utilities::fileutilities::{loadmodel, savevector2daspng, import_texture}; use std::time::Instant;

let rock = Material::new(Color::black(), Color::black(), Color::black(), Color::black(), 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, true, Some(0), None, Some(0), None, Some(1), Some(2), Some(3) );

let rocksphere = loadmodel("../Models/rock_sphere.obj", rock);

let mut meshes: Vec = vec![]; meshes.push(MeshObject::new(rock_sphere, true));

let sizex: usize = 1200; let sizey: usize = 800;

let environmentmap: Vector2D = importtexture("../Textures/HDRIOutdoor/HdrOutdoorResidentialRiverwalkAfternoonClear001JPG3K.jpg");

let mut maps: Vec> = vec![];

let rockcol: Vector2D = importtexture("../Textures/CliffGreyChunky008/CliffGreyChunky008COLVAR13K.jpg"); let rocknormal: Vector2D = importtexture("../Textures/CliffGreyChunky008/CliffGreyChunky008NRM3K.jpg"); let rocksmoothness: Vector2D = importtexture("../Textures/CliffGreyChunky008/CliffGreyChunky008GLOSS3K.jpg"); let rockspecular: Vector2D = importtexture("../Textures/CliffGreyChunky008/CliffGreyChunky008REFL_3K.jpg");

maps.push(rockcol); maps.push(rocknormal); maps.push(rocksmoothness); maps.push(rockspecular);

let scene: Scene = Scene::new(meshes, maps, Color::white() * 0.3, Some(environmentmap)); let camera: Camera = Camera::new( Vector3::new(-200.0, 0.0, 50.0), Vector3::new(0.0, 15.0, 0.0), scene, 2.8, sizex, size_y, 30, 3, 0.3, 0.0, 192.0, 1.3, 0 );

let framehandler: FrameHandler = FrameHandler::new(sizex, size_y, "RTracer");

let starttime = Instant::now(); let frame: Vector2D = camera.renderscene(framehandler, 5); let elapsedtime = start_time.elapsed();

let hours = elapsedtime.assecs() / 3600; let minutes = (elapsedtime.assecs() % 3600) / 60; let seconds = elapsedtime.assecs() % 60; let milliseconds = elapsedtime.subsecmillis(); println!( "Elapsed time: {:02}:{:02}:{:02}:{:03}", hours, minutes, seconds, milliseconds );

savevector2das_png(&frame, "../Renders/render.png"); ```

Makes some pretty pictures:

Suzanne

Splash

Brick