@@ -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