package faces import org.openrndr.application import org.openrndr.color.* import org.openrndr.draw.* import org.openrndr.extra.noise.filters.SimplexNoise3D import org.openrndr.math.IntVector2 import org.openrndr.math.Vector3 import phenax.extensions.CameraManager import phenax.utils.* fun main() = application { recordDuration(5.seconds()) configure { width = 640 height = 480 windowResizable = false position = IntVector2(0, 0) } oliveProgram { val cs by liveComputeShader("faces") val outputBuffer = colorBuffer(width, height, type = ColorType.UINT8) val size = Math.max(width, height) * 2 val noiseBuffer = colorBuffer(size, size, type = ColorType.UINT8) val noiseFilter = SimplexNoise3D() noiseFilter.scale = Vector3.ONE * 2.4 noiseFilter.octaves = 8 noiseFilter.premultipliedAlpha = true val cameraManager = CameraManager(Vector3(1.0, 1.0, -1.0), Vector3(30.0, 0.0, 0.0)) cameraManager.lightPosition = Vector3(6.0, 8.0, -8.0) extend(cameraManager) extend { noiseFilter.seed = Vector3(0.01, 0.01, 0.001) noiseFilter.apply(emptyArray(), noiseBuffer) cs.image("noise_texture", 1, noiseBuffer.imageBinding(0, ImageAccess.READ)) cs.uniform("seconds", seconds) cs.image("output_image", 0, outputBuffer.imageBinding(0, ImageAccess.WRITE)) cameraManager.setUniforms(cs) cs.execute(outputBuffer.width, outputBuffer.height, 1) drawer.image(outputBuffer) } } }