mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Fixed boundary meshing issue for scaled terrain sprites
This commit is contained in:
parent
59f4161f5c
commit
e498d78b6c
@ -16,10 +16,11 @@ impl<'a, V: ReadVol> ReadVol for Scaled<'a, V> {
|
||||
fn get(&self, pos: Vec3<i32>) -> Result<&Self::Vox, Self::Error> {
|
||||
let pos = pos.map2(self.scale, |e, scale| (e as f32 / scale).trunc() as i32);
|
||||
let search_size = (Vec3::one() / self.scale).map(|e: f32| e.ceil() as i32);
|
||||
(-search_size.x / 2..search_size.x / 2)
|
||||
let range_iter = |x| std::iter::successors(Some(0), |x| Some(if *x < 0 { -*x } else { -(*x + 1) })).take(x as usize * 2 + 1);
|
||||
range_iter(search_size.x / 2)
|
||||
.map(|i| {
|
||||
(-search_size.y / 2..search_size.y / 2).map(move |j| {
|
||||
(-search_size.z / 2..search_size.z / 2).map(move |k| Vec3::new(i, j, k))
|
||||
range_iter(search_size.y / 2).map(move |j| {
|
||||
range_iter(search_size.z / 2).map(move |k| Vec3::new(i, j, k))
|
||||
})
|
||||
})
|
||||
.flatten()
|
||||
@ -40,8 +41,8 @@ impl<'a, V: SizedVol> SizedVol for Scaled<'a, V> {
|
||||
|
||||
#[inline(always)]
|
||||
fn upper_bound(&self) -> Vec3<i32> {
|
||||
self.inner
|
||||
.upper_bound()
|
||||
.map2(self.scale, |e, scale| ((e as f32 - 1.0) * scale).floor() as i32 + 1)
|
||||
self.inner.upper_bound().map2(self.scale, |e, scale| {
|
||||
(e as f32 * scale).ceil() as i32 + 1
|
||||
})
|
||||
}
|
||||
}
|
||||
|
@ -37,7 +37,7 @@ where
|
||||
})
|
||||
.flatten()
|
||||
.flatten()
|
||||
.map(|pos| (pos, self.get(pos).unwrap()));
|
||||
.map(|pos| (pos, self.get(pos).map(|x| *x).unwrap_or(Vox::empty())));
|
||||
|
||||
for (pos, vox) in vol_iter {
|
||||
if let Some(col) = vox.get_color() {
|
||||
@ -103,7 +103,7 @@ where
|
||||
})
|
||||
.flatten()
|
||||
.flatten()
|
||||
.map(|pos| (pos, self.get(pos).unwrap()));
|
||||
.map(|pos| (pos, self.get(pos).map(|x| *x).unwrap_or(Vox::empty())));
|
||||
|
||||
for (pos, vox) in vol_iter {
|
||||
if let Some(col) = vox.get_color() {
|
||||
|
Loading…
Reference in New Issue
Block a user