Skip to content

Commit 6889d49

Browse files
committed
clean inside_octahedron function in nose 3D
1 parent 68f1f89 commit 6889d49

File tree

1 file changed

+19
-13
lines changed

1 file changed

+19
-13
lines changed

src/open_simplex_noise_3d.rs

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -121,12 +121,7 @@ impl OpenSimplexNoise3D {
121121
value
122122
}
123123

124-
fn inside_octahedron_in_between(
125-
ins: Vec3<f64>,
126-
contribute: impl Fn(f64, f64, f64) -> f64,
127-
) -> f64 {
128-
let mut value = 0.0;
129-
124+
fn determine_further_side(ins: Vec3<f64>) -> (Vec2<bool>, Vec2<i32>) {
130125
let decide_between_points = |p: f64, point_val: (i32, i32)| {
131126
if p > 1.0 {
132127
return (p - 1.0, point_val.0, true)
@@ -163,16 +158,27 @@ impl OpenSimplexNoise3D {
163158
}
164159
}
165160

161+
(Vec2::new(is_further_side_x, is_further_side_y), Vec2::new(point_x, point_y))
162+
}
163+
164+
fn inside_octahedron_in_between(
165+
ins: Vec3<f64>,
166+
contribute: impl Fn(f64, f64, f64) -> f64,
167+
) -> f64 {
168+
let mut value = 0.0;
169+
170+
let (is_further_side, point) = OpenSimplexNoise3D::determine_further_side(ins);
171+
166172
// Where each of the two closest points are determines how the extra two vertices are calculated.
167-
if is_further_side_x == is_further_side_y {
168-
if is_further_side_x {
173+
if is_further_side.x == is_further_side.y {
174+
if is_further_side.x {
169175
// Both closest points on (1, 1, 1) side
170176

171177
// One of the two extra points is (1, 1, 1)
172178
value += contribute(1.0, 1.0, 1.0);
173179

174180
// Other extra point is based on the shared axis.
175-
let closest = point_x & point_y;
181+
let closest = point.x & point.y;
176182
value += match closest {
177183
1 => contribute(2.0, 0.0, 0.0),
178184
2 => contribute(0.0, 2.0, 0.0),
@@ -185,7 +191,7 @@ impl OpenSimplexNoise3D {
185191
value += contribute(0.0, 0.0, 0.0);
186192

187193
// Other extra point is based on the omitted axis.
188-
let closest = point_x | point_y;
194+
let closest = point.x | point.y;
189195
value += match closest {
190196
3 => contribute(1.0, 1.0, -1.0),
191197
4 => contribute(1.0, -1.0, 1.0),
@@ -194,10 +200,10 @@ impl OpenSimplexNoise3D {
194200
}
195201
} else {
196202
// One point on (0, 0, 0) side, one point on (1, 1, 1) side
197-
let (c1, c2) = if is_further_side_x {
198-
(point_x, point_y)
203+
let (c1, c2) = if is_further_side.x {
204+
(point.x, point.y)
199205
} else {
200-
(point_y, point_x)
206+
(point.y, point.x)
201207
};
202208

203209
// One contribution is a permutation of (1, 1, -1)

0 commit comments

Comments
 (0)