[orx-shapes] Add 3d Hobby curves
This commit is contained in:
@@ -0,0 +1,48 @@
|
||||
package hobbycurve
|
||||
|
||||
import org.openrndr.WindowMultisample
|
||||
import org.openrndr.application
|
||||
import org.openrndr.color.ColorRGBa
|
||||
import org.openrndr.draw.isolated
|
||||
import org.openrndr.extra.noise.scatter
|
||||
import org.openrndr.extra.noise.uniform
|
||||
import org.openrndr.extra.shapes.hobbycurve.hobbyCurve
|
||||
import org.openrndr.math.Vector3
|
||||
import kotlin.math.cos
|
||||
import kotlin.random.Random
|
||||
|
||||
fun main() = application {
|
||||
configure {
|
||||
width = 720
|
||||
height = 720
|
||||
multisample = WindowMultisample.SampleCount(4)
|
||||
}
|
||||
program {
|
||||
val pts = drawer.bounds.scatter(30.0, distanceToEdge = 200.0, random = Random(3000))
|
||||
|
||||
extend {
|
||||
drawer.stroke = ColorRGBa.PINK
|
||||
drawer.strokeWeight = 4.0
|
||||
drawer.fill = null
|
||||
|
||||
val r = Random(3000)
|
||||
val hobby3D = hobbyCurve(
|
||||
pts.map { it.xy0 + Vector3(0.0, 0.0, Double.uniform(-360.0, 360.0, r)) },
|
||||
true,
|
||||
tensions = { chordIndex: Int ->
|
||||
Pair(
|
||||
cos(seconds + chordIndex * 0.1) * 0.5 + 0.5,
|
||||
cos(seconds + (1.0 + chordIndex) * 0.1) * 0.5 + 0.5
|
||||
)
|
||||
})
|
||||
|
||||
drawer.isolated {
|
||||
drawer.ortho(0.0, width.toDouble(), height.toDouble(), 0.0, -4000.0, 4000.0)
|
||||
drawer.translate(width / 2.0, height / 2.0)
|
||||
drawer.rotate(Vector3.UNIT_Y, seconds * 16.0)
|
||||
drawer.translate(-width / 2.0, -height / 2.0)
|
||||
drawer.path(hobby3D)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user