Fix out of bounds texture lookup and tweak noise function.

This commit is contained in:
Bill Thiede 2018-09-23 21:29:14 -07:00
parent 9c5233e057
commit 2f0ee09084

View File

@ -60,9 +60,9 @@ impl NoiseTexture {
impl Texture for NoiseTexture {
fn value(&self, _u: f32, _v: f32, p: Vec3) -> Vec3 {
//Vec3::new(1., 1., 1.) * turb(self.scale * p, 7)
Vec3::new(1., 1., 1.) * turb(self.scale * p, 7)
//Vec3::new(1., 1., 1.) * 0.5 * (1. + turb(self.scale * p, 7))
Vec3::new(1., 1., 1.) * 0.5 * (1. + (self.scale * p.x + 5. * turb(p, 7)).sin())
//Vec3::new(1., 1., 1.) * 0.5 * (1. + (self.scale * p.x + 5. * turb(p, 7)).sin())
//Vec3::new(1., 1., 1.) * 0.5 * (1. + GENERATOR.noise(self.scale * p))
}
}
@ -87,8 +87,20 @@ impl ImageTexture {
impl Texture for ImageTexture {
fn value(&self, u: f32, v: f32, _p: Vec3) -> Vec3 {
// Wrap texcoords by default.
let x = (u % 1. * self.width) as u32;
let y = ((1. - v % 1.) * self.height) as u32;
let x = (u % 1. * (self.width - 1.)) as u32;
let y = ((1. - v % 1.) * (self.height - 1.)) as u32;
if x >= self.width as u32 {
panic!(format!(
"u {} v {} x {} y {} w {} h {}",
u, v, x, y, self.width, self.height
));
}
if y >= self.height as u32 {
panic!(format!(
"u {} v {} x {} y {} w {} h {}",
u, v, x, y, self.width, self.height
));
}
let p = self.img.get_pixel(x, y);
let rgb = Vec3::new(p[0] as f32 / 255., p[1] as f32 / 255., p[2] as f32 / 255.);
rgb