diff options
| author | Akshay Nair <phenax5@gmail.com> | 2026-10-01 15:00:35 +0530 |
|---|---|---|
| committer | Akshay Nair <phenax5@gmail.com> | 2026-10-01 15:00:35 +0530 |
| commit | b04c4008e73d1515d1f78f993ca25826847d7207 (patch) | |
| tree | e884360817b047eae4db05e36595a0c7f40a1399 /src/main/kotlin | |
| parent | 0fc4f3de01b6ef63e1fc8d36d581a542b3c27a42 (diff) | |
| download | art-playground-openrndr-b04c4008e73d1515d1f78f993ca25826847d7207.tar.gz art-playground-openrndr-b04c4008e73d1515d1f78f993ca25826847d7207.zip | |
Add time
Diffstat (limited to '')
| -rw-r--r-- | src/main/kotlin/mrdoor/MrdoorProgram.kt | 8 | ||||
| -rw-r--r-- | src/main/kotlin/time/TimeProgram.kt | 78 |
2 files changed, 82 insertions, 4 deletions
diff --git a/src/main/kotlin/mrdoor/MrdoorProgram.kt b/src/main/kotlin/mrdoor/MrdoorProgram.kt index deabfe3..5d60505 100644 --- a/src/main/kotlin/mrdoor/MrdoorProgram.kt +++ b/src/main/kotlin/mrdoor/MrdoorProgram.kt @@ -19,15 +19,15 @@ fun main() = application { oliveProgram { val cs by liveComputeShader("mrdoor") - val cameraManager = - CameraManager(Vector3(1.0, 1.0, -1.0), Vector3.ZERO, Vector3(20.0, 30.0, -30.0)) - extend(cameraManager) + // val cameraManager = + // CameraManager(Vector3(1.0, 1.0, -1.0), Vector3.ZERO, Vector3(20.0, 30.0, -30.0)) + // extend(cameraManager) val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) extend { cs.uniform("seconds", seconds) - cameraManager.setUniforms(cs) + // cameraManager.setUniforms(cs) cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) cs.execute(outputBuffer.width, outputBuffer.height, 1) drawer.image(outputBuffer) diff --git a/src/main/kotlin/time/TimeProgram.kt b/src/main/kotlin/time/TimeProgram.kt new file mode 100644 index 0000000..d62b1ac --- /dev/null +++ b/src/main/kotlin/time/TimeProgram.kt @@ -0,0 +1,78 @@ +package time + +import java.time.LocalTime +import org.openrndr.application +import org.openrndr.color.* +import org.openrndr.draw.* +import org.openrndr.extra.noise.filters.SimplexNoise3D +import org.openrndr.math.* +import phenax.utils.* + +fun main() = application { + recordDuration(5.seconds()) + + if (recordingEnabled || screenshotEnabled) { + configure { + width = 1920 + height = 1080 + windowResizable = false + } + } else { + configure { + width = 640 + height = 360 + windowResizable = false + } + } + + oliveProgram { + val char_size = 200.0 + val font = program.loadFont("data/fonts/default.otf", char_size) + val cs by liveComputeShader("time") + + val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) + + val size = Math.max(width, height) * 4 + val noiseBuffer = colorBuffer(size, size, type = ColorType.UINT8) + val noiseFilter = SimplexNoise3D() + noiseFilter.scale = Vector3.ONE * 2.4 + noiseFilter.octaves = 8 + noiseFilter.premultipliedAlpha = true + noiseFilter.seed = Vector3(0.01, 0.01, 0.001) + noiseFilter.apply(emptyArray(), noiseBuffer) + + val characters = 0..9 + val textTarget = + renderTarget(char_size.toInt() * characters.count(), char_size.toInt()) { + colorBuffer(type = ColorType.UINT8) + } + + extend { + cs.image("noise_texture", 1, noiseBuffer.imageBinding(0, ImageAccess.READ)) + + drawer.isolatedWithTarget(textTarget) { + drawer.clear(ColorRGBa.TRANSPARENT) + drawer.ortho(textTarget) + drawer.fontMap = font + drawer.fill = ColorRGBa.WHITE + for (char in characters) { + drawer.text(char.toString(), Vector2(char * char_size.toDouble(), char_size / 2.0 + 5)) + } + } + + val textBuffer = textTarget.colorBuffer(0) + + cs.image("text_texture", 2, textBuffer.imageBinding(0, ImageAccess.READ)) + + val time = LocalTime.now() + cs.uniform("hours", time.getHour().toFloat()) + cs.uniform("minutes", time.getMinute().toFloat()) + cs.uniform("seconds", time.getSecond().toFloat()) + + cs.uniform("time", seconds) + cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) + cs.execute(outputBuffer.width, outputBuffer.height, 1) + drawer.image(outputBuffer) + } + } +} |
