rtiow: aabb add area/grow methods and infinite constructor.

This commit is contained in:
Bill Thiede 2023-02-10 17:04:01 -08:00
parent 3c28466d68
commit df928e1779

View File

@ -42,6 +42,13 @@ impl fmt::Debug for AABB {
} }
impl AABB { impl AABB {
// Create AABB with min = f32::MAX and max = -f32::MAX. It is expected the caller will use grow to create
// a vaild AABB.
pub fn infinite() -> AABB {
AABB {
bounds: [Vec3::from(f32::MAX), -Vec3::from(f32::MAX)],
}
}
pub fn new<V: Into<Vec3>>(min: V, max: V) -> AABB { pub fn new<V: Into<Vec3>>(min: V, max: V) -> AABB {
let min: Vec3 = min.into(); let min: Vec3 = min.into();
let max: Vec3 = max.into(); let max: Vec3 = max.into();
@ -51,12 +58,21 @@ impl AABB {
AABB { bounds: [min, max] } AABB { bounds: [min, max] }
} }
pub fn area(&self) -> f32 {
let e = self.max() - self.min();
e.x * e.y + e.y * e.z + e.z * e.x
}
pub fn volume(&self) -> f32 { pub fn volume(&self) -> f32 {
(self.min().x - self.max().x).abs() (self.min().x - self.max().x).abs()
* (self.min().y - self.max().y).abs() * (self.min().y - self.max().y).abs()
* (self.min().z - self.max().z).abs() * (self.min().z - self.max().z).abs()
} }
pub fn grow(&mut self, v: Vec3) {
self.bounds[0] = vec3::min(self.bounds[0], v);
self.bounds[1] = vec3::max(self.bounds[1], v);
}
pub fn longest_axis(&self) -> usize { pub fn longest_axis(&self) -> usize {
let xd = (self.min().x - self.max().x).abs(); let xd = (self.min().x - self.max().x).abs();
let yd = (self.min().y - self.max().y).abs(); let yd = (self.min().y - self.max().y).abs();