diff --git a/src/bvh.rs b/src/bvh.rs index 443e787..5ee93e9 100644 --- a/src/bvh.rs +++ b/src/bvh.rs @@ -3,7 +3,7 @@ use lerp::lerp_slice; use bbox::BBox; use boundable::Boundable; -use ray::{Ray, AccelRay}; +use ray::AccelRay; use algorithm::partition; #[derive(Debug)] diff --git a/src/camera.rs b/src/camera.rs index a5cd4b6..124553f 100644 --- a/src/camera.rs +++ b/src/camera.rs @@ -1,8 +1,7 @@ #![allow(dead_code)] -use std::f32::consts::FRAC_PI_4; - use math::{Vector, Point, Matrix4x4}; +use sampling::square_to_circle; use ray::Ray; use lerp::lerp_slice; @@ -79,34 +78,3 @@ impl Camera { Ray::new(orig * transform, dir * transform, time, false) } } - - -/// Maps the unit square to the unit circle. -/// NOTE: x and y should be distributed within [-1, 1], -/// not [0, 1]. -fn square_to_circle(x: f32, y: f32) -> (f32, f32) { - debug_assert!(x >= -1.0 && x <= 1.0); - debug_assert!(y >= -1.0 && y <= 1.0); - - if x == 0.0 && y == 0.0 { - return (0.0, 0.0); - } - - let (radius, angle) = { - if x > y.abs() { - // Quadrant 1 - (x, (y / x) * FRAC_PI_4) - } else if y > x.abs() { - // Quadrant 2 - (y, (2.0 - (x / y)) * FRAC_PI_4) - } else if x < -(y.abs()) { - // Quadrant 3 - (-x, (4.0 + (y / x)) * FRAC_PI_4) - } else { - // Quadrant 4 - (-y, (6.0 - (x / y)) * FRAC_PI_4) - } - }; - - return (radius * angle.cos(), radius * angle.sin()); -} diff --git a/src/color/mod.rs b/src/color/mod.rs index 0e699b7..04fd54f 100644 --- a/src/color/mod.rs +++ b/src/color/mod.rs @@ -31,7 +31,7 @@ pub trait Color { } fn nth_wavelength(hero_wavelength: f32, n: usize) -> f32 { - let mut wl = hero_wavelength + (WL_RANGE_Q * n as f32); + let wl = hero_wavelength + (WL_RANGE_Q * n as f32); if wl > WL_MAX { wl - WL_RANGE } else { @@ -55,23 +55,9 @@ impl SpectralSample { } } - pub fn add_color(&mut self, color: &T) { - self.e[0] += color.sample_spectrum(self.wl_n(0)); - self.e[1] += color.sample_spectrum(self.wl_n(1)); - self.e[2] += color.sample_spectrum(self.wl_n(2)); - self.e[3] += color.sample_spectrum(self.wl_n(3)); - } - - pub fn mul_color(&mut self, color: &T) { - self.e[0] *= color.sample_spectrum(self.wl_n(0)); - self.e[1] *= color.sample_spectrum(self.wl_n(1)); - self.e[2] *= color.sample_spectrum(self.wl_n(2)); - self.e[3] *= color.sample_spectrum(self.wl_n(3)); - } - /// Returns the nth wavelength fn wl_n(&self, n: usize) -> f32 { - let mut wl = self.hero_wavelength + (WL_RANGE_Q * n as f32); + let wl = self.hero_wavelength + (WL_RANGE_Q * n as f32); if wl > WL_MAX { wl - WL_RANGE } else { diff --git a/src/light/rectangle_light.rs b/src/light/rectangle_light.rs index 3242ed2..b56b2d2 100644 --- a/src/light/rectangle_light.rs +++ b/src/light/rectangle_light.rs @@ -1,12 +1,10 @@ -use math::{Vector, Point, Matrix4x4, cross}; +use math::{Vector, Point, Matrix4x4}; use bbox::BBox; use boundable::Boundable; use color::{XYZ, SpectralSample, Color}; use super::LightSource; use lerp::lerp_slice; use sampling::{spherical_triangle_solid_angle, uniform_sample_spherical_triangle}; -use std::f64::consts::PI as PI_64; -use std::f32::consts::PI as PI_32; #[derive(Debug)] pub struct RectangleLight { @@ -105,6 +103,9 @@ impl LightSource for RectangleLight { wavelength: f32, time: f32) -> f32 { + // We're not using these, silence warnings + let _ = (sample_dir, sample_u, sample_v, wavelength); + let dim = lerp_slice(&self.dimensions, time); // Get the four corners of the rectangle, transformed into world space @@ -136,6 +137,9 @@ impl LightSource for RectangleLight { wavelength: f32, time: f32) -> SpectralSample { + // We're not using these, silence warnings + let _ = (space, dir, u, v); + let dim = lerp_slice(&self.dimensions, time); let col = lerp_slice(&self.colors, time); diff --git a/src/light/sphere_light.rs b/src/light/sphere_light.rs index 6f58be2..acd39c4 100644 --- a/src/light/sphere_light.rs +++ b/src/light/sphere_light.rs @@ -6,7 +6,6 @@ use super::LightSource; use lerp::lerp_slice; use sampling::{uniform_sample_cone, uniform_sample_cone_pdf, uniform_sample_sphere}; use std::f64::consts::PI as PI_64; -use std::f32::consts::PI as PI_32; #[derive(Debug)] pub struct SphereLight { @@ -52,8 +51,7 @@ impl LightSource for SphereLight { // Create a coordinate system from the vector between the // point and the center of the light - let (x, y, z): (Vector, Vector, Vector); - z = pos - arr; + let z = pos - arr; let d2: f64 = z.length2() as f64; // Distance from center of sphere squared let d = d2.sqrt(); // Distance from center of sphere let (z, x, y) = coordinate_system_from_vector(z); @@ -79,11 +77,11 @@ impl LightSource for SphereLight { // Convert to a point on the sphere. // The technique for this is from "Akalin" on ompf2.com: // http://ompf2.com/viewtopic.php?f=3&t=1914#p4414 - let D = 1.0 - (d2 * sin_theta * sin_theta / (radius * radius)); - let cos_a = if D <= 0.0 { + let dd = 1.0 - (d2 * sin_theta * sin_theta / (radius * radius)); + let cos_a = if dd <= 0.0 { sin_theta_max } else { - ((d / radius) * sin_theta2) + (cos_theta * D.sqrt()) + ((d / radius) * sin_theta2) + (cos_theta * dd.sqrt()) }; let sin_a = ((1.0 - (cos_a * cos_a)).max(0.0)).sqrt(); let phi = v as f64 * 2.0 * PI_64; @@ -114,6 +112,9 @@ impl LightSource for SphereLight { wavelength: f32, time: f32) -> f32 { + // We're not using these, silence warnings + let _ = (sample_dir, sample_u, sample_v, wavelength); + // TODO: use transform space correctly let pos = Point::new(0.0, 0.0, 0.0) * space.inverse(); let radius: f64 = lerp_slice(&self.radii, time) as f64; @@ -141,6 +142,9 @@ impl LightSource for SphereLight { wavelength: f32, time: f32) -> SpectralSample { + // We're not using these, silence warnings + let _ = (space, dir, u, v); + // TODO: use transform space correctly let radius = lerp_slice(&self.radii, time) as f64; let col = lerp_slice(&self.colors, time); diff --git a/src/parse/psy_light.rs b/src/parse/psy_light.rs index d5de6bb..d43086a 100644 --- a/src/parse/psy_light.rs +++ b/src/parse/psy_light.rs @@ -5,11 +5,10 @@ use std::result::Result; use nom::IResult; use super::DataTree; -use super::basics::{ws_usize, ws_f32}; +use super::basics::ws_f32; use super::psy::PsyParseError; use light::{SphereLight, RectangleLight}; -use math::Point; use color::XYZ; pub fn parse_sphere_light(tree: &DataTree) -> Result { diff --git a/src/renderer.rs b/src/renderer.rs index f1c5e72..25dc599 100644 --- a/src/renderer.rs +++ b/src/renderer.rs @@ -14,11 +14,11 @@ use ray::Ray; use assembly::Object; use tracer::Tracer; use halton; -use math::{Vector, Matrix4x4, dot, fast_logit}; +use math::{Matrix4x4, dot, fast_logit}; use image::Image; use surface; use scene::Scene; -use color::{Color, XYZ, rec709e_to_xyz, map_0_1_to_wavelength}; +use color::{Color, XYZ, map_0_1_to_wavelength}; #[derive(Debug)] pub struct Renderer { @@ -231,10 +231,10 @@ impl LightPath { 0 => { self.round += 1; if let &surface::SurfaceIntersection::Hit { t: _, - pos: pos, - nor: nor, + pos, + nor, local_space: _, - uv } = isect { + uv: _ } = isect { // Hit something! Do lighting! if scene.root.light_accel.len() > 0 { // Get the light and the mapping to its local space diff --git a/src/sampling.rs b/src/sampling.rs index 3d9e419..6e8df13 100644 --- a/src/sampling.rs +++ b/src/sampling.rs @@ -1,3 +1,5 @@ +#![allow(dead_code)] + use math::{Vector, dot}; use std::f64::consts::PI as PI_64; @@ -5,7 +7,6 @@ use std::f32::consts::PI as PI_32; use std::f32::consts::FRAC_PI_4 as QPI_32; /// Maps the unit square to the unit circle. -/// Modifies x and y in place. /// NOTE: x and y should be distributed within [-1, 1], /// not [0, 1]. pub fn square_to_circle(x: f32, y: f32) -> (f32, f32) { diff --git a/src/surface/triangle_mesh.rs b/src/surface/triangle_mesh.rs index 58bbe63..f3b0c3a 100644 --- a/src/surface/triangle_mesh.rs +++ b/src/surface/triangle_mesh.rs @@ -1,7 +1,7 @@ #![allow(dead_code)] use lerp::{lerp, lerp_slice, lerp_slice_with}; -use math::{Point, Normal, Matrix4x4, cross}; +use math::{Point, Matrix4x4, cross}; use ray::{Ray, AccelRay}; use triangle; use bbox::BBox; diff --git a/src/tracer.rs b/src/tracer.rs index 4640535..b667aa0 100644 --- a/src/tracer.rs +++ b/src/tracer.rs @@ -144,19 +144,6 @@ impl TransformStack { ts } - fn with_capacity(capacity: usize) -> TransformStack { - let mut ts = TransformStack { - stack: Vec::with_capacity(capacity), - stack_indices: Vec::with_capacity(capacity), - scratch_space: Vec::with_capacity(capacity), - }; - - ts.stack_indices.push(0); - ts.stack_indices.push(0); - - ts - } - fn push(&mut self, xforms: &[Matrix4x4]) { assert!(xforms.len() > 0);