diff --git a/orx-camera/src/jvmDemo/kotlin/DemoCamera2D02.kt b/orx-camera/src/jvmDemo/kotlin/DemoCamera2D02.kt new file mode 100644 index 00000000..e39eb4bc --- /dev/null +++ b/orx-camera/src/jvmDemo/kotlin/DemoCamera2D02.kt @@ -0,0 +1,63 @@ +import org.openrndr.application +import org.openrndr.color.ColorRGBa +import org.openrndr.draw.isolatedWithTarget +import org.openrndr.draw.loadFont +import org.openrndr.draw.renderTarget +import org.openrndr.extra.camera.Camera2D +import org.openrndr.math.Vector2 +import org.openrndr.math.transforms.transform +import org.openrndr.shape.Rectangle +import kotlin.math.sin + +/** + * # Camera2D demo with static elements + * + * An approach for having certain elements not affected by the camera + */ +fun main() = application { + program { + // Create a renderTarget where to draw things. It will be controlled by the camera. + val rt = renderTarget(width, height) { + colorBuffer() + depthBuffer() + } + // Create camera and apply an initial transformation + // so the origin is no longer in the top left corner. + val cam = Camera2D() + cam.view *= transform { + translate(width * 0.5, height * 1.0) + rotate(45.0) + scale(2.0) + } + + // Add mouse listeners to the camera + cam.setup(this) + + val font = loadFont("demo-data/fonts/IBMPlexMono-Regular.ttf", 50.0) + + extend { + // Draw onto the renderTarget + drawer.isolatedWithTarget(rt) { + // Calling ortho required if the size differs from the window size + ortho(rt) + // Apply the current camera transformation + view = cam.view + // Clear render target + clear(ColorRGBa.TRANSPARENT) + // Draw the things affected by the camera (here a rectangle at the origin) + rectangle(Rectangle.fromCenter(Vector2.ZERO, 200.0, 100.0 + sin(seconds) * 20.0)) + } + + drawer.clear(ColorRGBa.PINK) + + // Draw the renderTarget with the camera applied to it + drawer.image(rt.colorBuffer(0)) + + // Draw things not affected by the camera + drawer.fontMap = font + drawer.fill = ColorRGBa.PINK.shade(0.5) + drawer.text("click and drag mouse", 50.0, 400.0) + drawer.text("use mouse wheel", 50.0, 450.0) + } + } +}