use cgmath::Vector3; pub struct Ray { pub origin: Vector3, pub direction: Vector3, pub inv_direction: Vector3, pub signs: Vector3, } impl Ray { pub fn new(origin: Vector3, direction: Vector3) -> Ray { let inv_direction = 1.0 / direction; let x = (inv_direction.x < 0.0) as usize; let y = (inv_direction.y < 0.0) as usize; let z = (inv_direction.z < 0.0) as usize; Ray { origin, direction, inv_direction, signs: Vector3::new(x, y, z), } } }