[orx-noise] Add demos and extensions for uniform simplex sampling
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
package simplexrange
|
||||
|
||||
import org.openrndr.application
|
||||
import org.openrndr.color.ColorRGBa
|
||||
import org.openrndr.draw.isolated
|
||||
import kotlin.random.Random
|
||||
import org.openrndr.extra.noise.simplexrange.uniformSimplex
|
||||
import org.openrndr.math.Polar
|
||||
import org.openrndr.math.Vector2
|
||||
import kotlin.math.cos
|
||||
import kotlin.math.floor
|
||||
|
||||
/**
|
||||
* This demo creates a dynamic graphical output utilizing simplex and
|
||||
* linear interpolation-based color ranges.
|
||||
*
|
||||
* Functionalities:
|
||||
* - Defines a list of base colors converted to LAB color space for smooth interpolation.
|
||||
* - Constructs a 3D simplex range and a 2D linear range for color sampling.
|
||||
* - Randomly populates two sections of the screen with rectangles filled with colors
|
||||
* sampled from simplex and linear ranges respectively.
|
||||
* - Draws a vertical divider line in the middle of the application window.
|
||||
*/
|
||||
fun main() {
|
||||
application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
}
|
||||
program {
|
||||
extend {
|
||||
val positions = (0 until 3).map { Polar((30.0 + it * 120.0), 180.0).cartesian }
|
||||
val colors = listOf(ColorRGBa.PINK, ColorRGBa.RED, ColorRGBa.BLUE).map { it.toLABa() }
|
||||
val freq = 1.0
|
||||
|
||||
drawer.stroke = null
|
||||
|
||||
val power = cos(floor(seconds*freq)/freq) *16.0 + 16.0
|
||||
drawer.isolated {
|
||||
drawer.translate(drawer.bounds.position(0.25,0.25) + Vector2(0.0, 40.0))
|
||||
val rp = Random((seconds * freq).toInt())
|
||||
val rc = Random((seconds * freq).toInt())
|
||||
for (i in 0 until 32 * 32) {
|
||||
drawer.fill = colors.uniformSimplex(rc, 1, power).toRGBa()
|
||||
drawer.circle(positions.uniformSimplex(rp, 1, power), 2.0)
|
||||
}
|
||||
}
|
||||
drawer.isolated {
|
||||
drawer.translate(drawer.bounds.position(0.75,0.75) + Vector2(0.0, 40.0))
|
||||
val rp = Random((seconds * freq).toInt())
|
||||
val rc = Random((seconds * freq).toInt())
|
||||
for (i in 0 until 32 * 32) {
|
||||
drawer.fill = colors.uniformSimplex(rc, 2, power).toRGBa()
|
||||
drawer.circle(positions.uniformSimplex(rp, 2, power), 2.0)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
drawer.isolated {
|
||||
drawer.stroke = null
|
||||
val rc = Random((seconds * freq).toInt())
|
||||
drawer.translate(drawer.bounds.position(0.5,0.0) + Vector2(20.0, 20.0))
|
||||
|
||||
for (i in 0 until 32 * 32) {
|
||||
val x = i.mod(32)
|
||||
val y = i / 32
|
||||
drawer.fill = colors.uniformSimplex(rc, 1, power).toRGBa()
|
||||
drawer.rectangle(x * 10.0, y * 10.0, 10.0, 10.0)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
drawer.isolated {
|
||||
drawer.stroke = null
|
||||
val rc = Random((seconds * freq).toInt())
|
||||
|
||||
drawer.translate(drawer.bounds.position(0.0,0.5) + Vector2(20.0, 20.0))
|
||||
|
||||
for (i in 0 until 32 * 32) {
|
||||
val x = i.mod(32)
|
||||
val y = i / 32
|
||||
drawer.fill = colors.uniformSimplex(rc, 2, power).toRGBa()
|
||||
drawer.rectangle(x * 10.0, y * 10.0, 10.0, 10.0)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user