Fix mix issues in orx-noise
This commit is contained in:
@@ -1,41 +1,42 @@
|
|||||||
package org.openrndr.extra.noise
|
package org.openrndr.extra.noise
|
||||||
|
|
||||||
import org.openrndr.math.Vector3
|
import org.openrndr.math.Vector3
|
||||||
|
import org.openrndr.math.mix
|
||||||
fun perlinLinear(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::linear)
|
|
||||||
fun perlinQuintic(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::quintic)
|
fun perlinLinear(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::linear)
|
||||||
fun perlinHermite(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::hermite)
|
fun perlinQuintic(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::quintic)
|
||||||
|
fun perlinHermite(seed: Int, x: Double, y: Double, z: Double) = perlin(seed, x, y, z, ::hermite)
|
||||||
fun perlinLinear(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::linear)
|
|
||||||
fun perlinQuintic(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::quintic)
|
fun perlinLinear(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::linear)
|
||||||
fun perlinHermite(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::hermite)
|
fun perlinQuintic(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::quintic)
|
||||||
|
fun perlinHermite(seed: Int, position: Vector3) = perlin(seed, position.x, position.y, position.z, ::hermite)
|
||||||
inline fun perlin(seed: Int, x: Double, y: Double, z: Double, crossinline interpolator: (Double) -> Double = ::linear): Double {
|
|
||||||
val x0 = x.fastFloor()
|
inline fun perlin(seed: Int, x: Double, y: Double, z: Double, crossinline interpolator: (Double) -> Double = ::linear): Double {
|
||||||
val y0 = y.fastFloor()
|
val x0 = x.fastFloor()
|
||||||
val z0 = z.fastFloor()
|
val y0 = y.fastFloor()
|
||||||
val x1 = x0 + 1
|
val z0 = z.fastFloor()
|
||||||
val y1 = y0 + 1
|
val x1 = x0 + 1
|
||||||
val z1 = z0 + 1
|
val y1 = y0 + 1
|
||||||
|
val z1 = z0 + 1
|
||||||
val xs: Double = interpolator(x - x0)
|
|
||||||
val ys: Double = interpolator(y - y0)
|
val xs: Double = interpolator(x - x0)
|
||||||
val zs: Double = interpolator(z - z0)
|
val ys: Double = interpolator(y - y0)
|
||||||
|
val zs: Double = interpolator(z - z0)
|
||||||
val xd0 = x - x0
|
|
||||||
val yd0 = y - y0
|
val xd0 = x - x0
|
||||||
val zd0 = z - z0
|
val yd0 = y - y0
|
||||||
val xd1 = xd0 - 1
|
val zd0 = z - z0
|
||||||
val yd1 = yd0 - 1
|
val xd1 = xd0 - 1
|
||||||
val zd1 = zd0 - 1
|
val yd1 = yd0 - 1
|
||||||
|
val zd1 = zd0 - 1
|
||||||
val xf00 = lerp(gradCoord3D(seed, x0, y0, z0, xd0, yd0, zd0), gradCoord3D(seed, x1, y0, z0, xd1, yd0, zd0), xs)
|
|
||||||
val xf10 = lerp(gradCoord3D(seed, x0, y1, z0, xd0, yd1, zd0), gradCoord3D(seed, x1, y1, z0, xd1, yd1, zd0), xs)
|
val xf00 = mix(gradCoord3D(seed, x0, y0, z0, xd0, yd0, zd0), gradCoord3D(seed, x1, y0, z0, xd1, yd0, zd0), xs)
|
||||||
val xf01 = lerp(gradCoord3D(seed, x0, y0, z1, xd0, yd0, zd1), gradCoord3D(seed, x1, y0, z1, xd1, yd0, zd1), xs)
|
val xf10 = mix(gradCoord3D(seed, x0, y1, z0, xd0, yd1, zd0), gradCoord3D(seed, x1, y1, z0, xd1, yd1, zd0), xs)
|
||||||
val xf11 = lerp(gradCoord3D(seed, x0, y1, z1, xd0, yd1, zd1), gradCoord3D(seed, x1, y1, z1, xd1, yd1, zd1), xs)
|
val xf01 = mix(gradCoord3D(seed, x0, y0, z1, xd0, yd0, zd1), gradCoord3D(seed, x1, y0, z1, xd1, yd0, zd1), xs)
|
||||||
|
val xf11 = mix(gradCoord3D(seed, x0, y1, z1, xd0, yd1, zd1), gradCoord3D(seed, x1, y1, z1, xd1, yd1, zd1), xs)
|
||||||
val yf0 = lerp(xf00, xf10, ys)
|
|
||||||
val yf1 = lerp(xf01, xf11, ys)
|
val yf0 = mix(xf00, xf10, ys)
|
||||||
|
val yf1 = mix(xf01, xf11, ys)
|
||||||
return lerp(yf0, yf1, zs)
|
|
||||||
|
return mix(yf0, yf1, zs)
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.openrndr.extra.noise
|
package org.openrndr.extra.noise
|
||||||
|
|
||||||
import org.openrndr.math.Vector2
|
import org.openrndr.math.Vector2
|
||||||
|
import org.openrndr.math.mix
|
||||||
|
|
||||||
fun valueLinear(seed: Int, x: Double, y: Double) = value(seed, x, y, ::linear)
|
fun valueLinear(seed: Int, x: Double, y: Double) = value(seed, x, y, ::linear)
|
||||||
fun valueQuintic(seed: Int, x: Double, y: Double) = value(seed, x, y, ::quintic)
|
fun valueQuintic(seed: Int, x: Double, y: Double) = value(seed, x, y, ::quintic)
|
||||||
@@ -24,8 +25,8 @@ inline fun value(seed: Int, x: Double, y: Double, crossinline interpolation: (Do
|
|||||||
val xs = interpolation(x - x0)
|
val xs = interpolation(x - x0)
|
||||||
val ys = interpolation(y - y0)
|
val ys = interpolation(y - y0)
|
||||||
|
|
||||||
val xf0 = lerp(valCoord2D(seed, x0, y0), valCoord2D(seed, x1, y0), xs)
|
val xf0 = mix(valCoord2D(seed, x0, y0), valCoord2D(seed, x1, y0), xs)
|
||||||
val xf1 = lerp(valCoord2D(seed, x0, y1), valCoord2D(seed, x1, y1), xs)
|
val xf1 = mix(valCoord2D(seed, x0, y1), valCoord2D(seed, x1, y1), xs)
|
||||||
|
|
||||||
return lerp(xf0, xf1, ys)
|
return mix(xf0, xf1, ys)
|
||||||
}
|
}
|
||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.openrndr.extra.noise
|
package org.openrndr.extra.noise
|
||||||
|
|
||||||
import org.openrndr.math.Vector3
|
import org.openrndr.math.Vector3
|
||||||
|
import org.openrndr.math.mix
|
||||||
|
|
||||||
fun valueLinear(seed: Int, x: Double, y: Double, z: Double) = value(seed, x, y, z, ::linear)
|
fun valueLinear(seed: Int, x: Double, y: Double, z: Double) = value(seed, x, y, z, ::linear)
|
||||||
fun valueQuintic(seed: Int, x: Double, y: Double, z: Double) = value(seed, x, y, z, ::quintic)
|
fun valueQuintic(seed: Int, x: Double, y: Double, z: Double) = value(seed, x, y, z, ::quintic)
|
||||||
@@ -28,13 +29,13 @@ inline fun value(seed: Int, x: Double, y: Double, z: Double, crossinline interpo
|
|||||||
val zs = interpolation(z - z0)
|
val zs = interpolation(z - z0)
|
||||||
|
|
||||||
|
|
||||||
val xf00 = lerp(valCoord3D(seed, x0, y0, z0), valCoord3D(seed, x1, y0, z0), xs)
|
val xf00 = mix(valCoord3D(seed, x0, y0, z0), valCoord3D(seed, x1, y0, z0), xs)
|
||||||
val xf10 = lerp(valCoord3D(seed, x0, y1, z0), valCoord3D(seed, x1, y1, z0), xs)
|
val xf10 = mix(valCoord3D(seed, x0, y1, z0), valCoord3D(seed, x1, y1, z0), xs)
|
||||||
val xf01 = lerp(valCoord3D(seed, x0, y0, z1), valCoord3D(seed, x1, y0, z1), xs)
|
val xf01 = mix(valCoord3D(seed, x0, y0, z1), valCoord3D(seed, x1, y0, z1), xs)
|
||||||
val xf11 = lerp(valCoord3D(seed, x0, y1, z1), valCoord3D(seed, x1, y1, z1), xs)
|
val xf11 = mix(valCoord3D(seed, x0, y1, z1), valCoord3D(seed, x1, y1, z1), xs)
|
||||||
|
|
||||||
val yf0 = lerp(xf00, xf10, ys)
|
val yf0 = mix(xf00, xf10, ys)
|
||||||
val yf1 = lerp(xf01, xf11, ys)
|
val yf1 = mix(xf01, xf11, ys)
|
||||||
|
|
||||||
return lerp(yf0, yf1, zs)
|
return mix(yf0, yf1, zs)
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user