๐Ÿ”ง OPENRNDR ์‹œ์ž‘ํ•˜๊ธฐ

BamgasiJMยท5์ผ ์ „

OPENRNDR

๋ชฉ๋ก ๋ณด๊ธฐ
1/17
post-thumbnail

์œˆ๋„์šฐ 11 ํ™˜๊ฒฝ์—์„œ IntelliJ IDEA๋ฅผ ํ™œ์šฉํ•ด OPENRNDR ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ Repository๋ฅผ ๊ฐ€์ ธ์™€ Gradle์ด ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ์‹

OPENRNDR๋Š” Kotlin ๋ฐ JVM ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋ฏ€๋กœ, ๋ณ„๋„๋กœ ์ˆ˜๋™ ๋นŒ๋“œ ์„ค์ •์„ ํ•  ํ•„์š” ์—†์ด ๊ณต์‹ ์ œ๊ณต ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…œํ”Œ๋ฆฟ Repository๋ฅผ ๊ฐ€์ ธ์™€ Gradle์ด ๋นŒ๋“œํ•˜๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ์‹์ด ๊ฐ€์žฅ ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.


1. ์‚ฌ์ „ ์ค€๋น„ (์„ ํƒ์‚ฌํ•ญ)

  • Git ์„ค์น˜: ํ…œํ”Œ๋ฆฟ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„ํ•ด Git์ด ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š๋‹ค๋ฉด Official Git ํŽ˜์ด์ง€์—์„œ Windows์šฉ 64-bit ์„ค์น˜ ํŒŒ์ผ์„ ๋‹ค์šด๋กœ๋“œํ•˜์—ฌ ๊ธฐ๋ณธ ์˜ต์…˜์œผ๋กœ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.
  • JDK (Java Development Kit): IntelliJ๊ฐ€ ์ž์ฒด ๋ถ€bundled JDK๋ฅผ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์œผ๋ฏ€๋กœ, ์‹œ์Šคํ…œ์— JDK๊ฐ€ ๋ฏธ๋ฆฌ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์•„๋„ ์ง„ํ–‰ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2. IntelliJ IDEA ์„ค์น˜

  1. JetBrains ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์—์„œ IntelliJ IDEA Community Edition(๋ฌด๋ฃŒ) ๋˜๋Š” Ultimate Edition ๋‹ค์šด๋กœ๋“œ ํŒŒ์ผ(.exe)์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  2. ์„ค์น˜ ์˜ต์…˜ ์ค‘ Add "bin" folder to the PATH ํ•ญ๋ชฉ์„ ์ฒดํฌํ•ด ๋‘๋ฉด ํ™˜๊ฒฝ๋ณ€์ˆ˜๊ฐ€ ์ž๋™ ์„ค์ •๋˜์–ด ์ถ”ํ›„ ๊ตฌ์„ฑ์— ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

3. OPENRNDR ํ…œํ”Œ๋ฆฟ ์ €์žฅ์†Œ ํด๋ก  (Clone)

OPENRNDR ๊ณต์‹ ํ…œํ”Œ๋ฆฟ์—๋Š” ํ•„์ˆ˜ Gradle ์„ค์ •๊ณผ ๊ธฐ๋ณธ ์˜์กด์„ฑ์ด ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. IntelliJ IDEA ์‹คํ–‰ ํ›„ ์ดˆ๊ธฐ ํ™”๋ฉด์—์„œ Clone Repository ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค. (์ด๋ฏธ ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ด๋ ค ์žˆ๋‹ค๋ฉด File > New > Project from Version Control... ์„ ํƒ)
  2. URL๋ž€์— ๋‹ค์Œ ๊ณต์‹ ํ…œํ”Œ๋ฆฟ ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค:
https://github.com/openrndr/openrndr-template.git
  1. ๋กœ์ปฌ ์ €์žฅ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ง€์ •ํ•œ ํ›„ Clone์„ ๋ˆ„๋ฆ…๋‹ˆ๋‹ค.

4. Gradle ์˜์กด์„ฑ ๋™๊ธฐํ™” ๋ฐ JDK ์„ค์ •

  1. ํ”„๋กœ์ ํŠธ๊ฐ€ ์—ด๋ฆฌ๋ฉด ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ ์ƒํƒœ ํ‘œ์‹œ์ค„์—์„œ Gradle์ด ํ•„์š”ํ•œ ์˜์กด์„ฑ(OPENRNDR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, Kotlin SDK ๋“ฑ)์„ ์ž๋™์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค. (์ตœ์ดˆ ์‹คํ–‰ ์‹œ 1~3๋ถ„ ์ •๋„ ์†Œ์š”๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค)
  2. SDK ์„ค์ • ํ•„์š” ๋ฉ”์‹œ์ง€๊ฐ€ ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ Build Gradle ์‹คํŒจ๊ฐ€ ๋œฐ ๊ฒฝ์šฐ:
  • File > Project Structure > Project ์ด๋™
  • SDK ํ•ญ๋ชฉ์—์„œ Download JDK๋ฅผ ์„ ํƒํ•˜์—ฌ Amazon Corretto 17 ๋˜๋Š” Oracle OpenJDK 17/21 ๋ฒ„์ „์„ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.
  1. IntelliJ ์˜ค๋ฅธ์ชฝ ์ƒ๋‹จ์˜ Gradle ํƒญ (์ฝ”๋ผ๋ฆฌ ์•„์ด์ฝ˜)์„ ์—ด์–ด Reload All Gradle Projects ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ ๋™๊ธฐํ™”๋ฅผ ์™„๋ฃŒํ•ฉ๋‹ˆ๋‹ค.

5. ๊ธฐ๋ณธ ํ…œํ”Œ๋ฆฟ ์‹คํ–‰ ํ™•์ธ

  1. ์™ผ์ชฝ Project Explorer์—์„œ ์•„๋ž˜ ๊ฒฝ๋กœ์˜ ํŒŒ์ผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค:
    src/main/kotlin/TemplateProgram.kt
  2. ํŒŒ์ผ ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ตฌ์กฐ๋ฅผ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค:
import org.openrndr.application
import org.openrndr.color.ColorRGBa

fun main() = application {
    configure {
        width = 640
        height = 480
    }
    program {
        extend {
            drawer.clear(ColorRGBa.PINK)
        }
    }
}
  1. fun main() ์ฝ”๋“œ ์ค„ ๋ฐ”๋กœ ์˜†์— ํ‘œ์‹œ๋˜๋Š” ์ดˆ๋ก์ƒ‰ ์žฌ์ƒ ์‚ผ๊ฐ ๋ฒ„ํŠผ(โ–ถ)์„ ํด๋ฆญํ•˜๊ณ  Run 'TemplateProgramKt'๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
  2. ๋ถ„ํ™์ƒ‰(PINK) ๋ฐ”ํƒ•์˜ 640x480 ์ฐฝ์ด ์ •์ƒ์ ์œผ๋กœ ๋ Œ๋”๋ง๋˜๋ฉด ์œˆ๋„์šฐ 11 ํ™˜๊ฒฝ ๊ตฌ์ถ•์ด ์™„๋ฃŒ๋œ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๐Ÿ’ก ํŒ: ORX (OPENRNDR Extensions) ์‚ฌ์šฉํ•˜๊ธฐ

์ถ”๊ฐ€ ๊ทธ๋ž˜ํ”ฝ ๊ธฐ๋Šฅ, ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ, UI ํŒจ๋„, ๋ผ์ด๋ธŒ ์ฝ”๋”ฉ(orx-olive) ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•˜๋ ค๋ฉด ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ์˜ build.gradle.kts ํŒŒ์ผ์„ ์—ด๊ณ  ์ฃผ์„ ์ฒ˜๋ฆฌ๋˜์–ด ์žˆ๋Š” orxFeatures ํ•ญ๋ชฉ์˜ ์ฃผ์„์„ ํ•ด์ œํ•œ ํ›„ Gradle Sync๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.



์ตœ์†Œ ์˜์กด์„ฑ๋งŒ ์ˆ˜๋™ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•˜๊ธฐ

ํ…œํ”Œ๋ฆฟ ์ €์žฅ์†Œ๋ฅผ ํด๋ก ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ์กด IntelliJ ํ”„๋กœ์ ํŠธ๋‚˜ ์ƒˆ Kotlin ํ”„๋กœ์ ํŠธ์— OPENRNDR ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ตœ์†Œ ์˜์กด์„ฑ๋งŒ ์ˆ˜๋™ ์ถ”๊ฐ€ํ•˜์—ฌ ๊ฐ€๋ณ๊ฒŒ ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

OPENRNDR๋Š” C++ ๋„ค์ดํ‹ฐ๋ธŒ ๊ทธ๋ž˜ํ”ฝ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(LWJGL ๋“ฑ)๋ฅผ ํฌํ•จํ•˜๋ฏ€๋กœ, Gradle ์„ค์ • ํŒŒ์ผ(build.gradle.kts)์— ์ค‘์•™ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์™€ ์ตœ์†Œ ์˜์กด์„ฑ 3๊ฐœ(core, application, native binaries)๋งŒ ๋ช…์‹œํ•ด ์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


1. IntelliJ์—์„œ ์ƒˆ Kotlin ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

  1. IntelliJ IDEA ์‹คํ–‰ ํ›„ New Project ํด๋ฆญ
  2. ์™ผ์ชฝ ๋ฉ”๋‰ด์—์„œ Kotlin ์„ ํƒ
  3. ์„ค์ •๊ฐ’ ์ง€์ •:
  • Name: ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ (์˜ˆ: openrndr-quickstart)
  • Build system: Gradle ์„ ํƒ
  • Gradle DSL: Kotlin (build.gradle.kts) ์„ ํƒ
  • JDK: 17 ์ด์ƒ ์„ ํƒ (์—†์œผ๋ฉด Download JDK๋กœ ๋ฐ”๋กœ ์„ค์น˜)
  1. Create ๋ฒ„ํŠผ ํด๋ฆญ

2. build.gradle.kts ํŒŒ์ผ ์„ค์ •

ํ”„๋กœ์ ํŠธ ๋ฃจํŠธ ๋””๋ ‰ํ„ฐ๋ฆฌ์˜ build.gradle.kts ํŒŒ์ผ์„ ์—ด๊ณ  ๊ธฐ์กด ๋‚ด์šฉ์„ ์•„๋ž˜์™€ ๊ฐ™์ด ๊ต์ฒดํ•ฉ๋‹ˆ๋‹ค.

plugins {
    kotlin("jvm") version "1.9.22"
    application
}

repositories {
    mavenCentral()
    maven("https://maven.openrndr.org")
}

// OPENRNDR ๋ฒ„์ „ ๋ฐ ํ”Œ๋žซํผ ์„ค์ •
val openrndrVersion = "0.4.3-RELEASE"
val openrndrOs = "windows"

dependencies {
    // ์ฝ”์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    implementation("org.openrndr:openrndr-core:$openrndrVersion")
    implementation("org.openrndr:openrndr-application:$openrndrVersion")
    implementation("org.openrndr:openrndr-color:$openrndrVersion")
    
    // ์œˆ๋„์šฐ 11 64bit ๋„ค์ดํ‹ฐ๋ธŒ ๋ฐ”์ธ๋”ฉ
    runtimeOnly("org.openrndr:openrndr-gl3-natives-\(openrndrOs:\)openrndrVersion")
    runtimeOnly("org.openrndr:openrndr-openal-natives-\(openrndrOs:\)openrndrVersion")
    
    // Kotlin ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฐ ์ฝ”๋ฃจํ‹ด support
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
}

application {
    mainClass.set("MainKt")
}

ํŒŒ์ผ ํŽธ์ง‘ ํ›„ IntelliJ ์šฐ์ธก ์ƒ๋‹จ์— ๋œจ๋Š” Gradle ๋™๊ธฐํ™” ์•„์ด์ฝ˜(์ฝ”๋ผ๋ฆฌ ๋ชจ์–‘ ๋ฒ„ํŠผ)**์„ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ Ctrl + Shift + O๋ฅผ ๋ˆŒ๋Ÿฌ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.


3. ๋ฉ”์ธ ์†Œ์Šค ์ฝ”๋“œ ์ž‘์„ฑ

  1. src/main/kotlin/ ๊ฒฝ๋กœ์— Main.kt ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.
  2. ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.
import org.openrndr.application
import org.openrndr.color.ColorRGBa

fun main() = application {
    configure {
        width = 800
        height = 600
        title = "OPENRNDR Light Setup"
    }
    program {
        extend {
            // ๋ฐฐ๊ฒฝ์ƒ‰ ์„ค์ • (R, G, B)
            drawer.clear(ColorRGBa(0.1, 0.1, 0.15))
            
            // ์ค‘์•™์— ์› ๊ทธ๋ฆฌ๊ธฐ
            drawer.fill = ColorRGBa(0.9, 0.4, 0.3)
            drawer.circle(drawer.bounds.center, 150.0)
        }
    }
}

4. ์‹คํ–‰

fun main() ์˜†์˜ ์ดˆ๋ก์ƒ‰ ์žฌ์ƒ ์‚ผ๊ฐ ๋ฒ„ํŠผ(โ–ถ)์„ ํด๋ฆญํ•˜๊ณ  Run 'MainKt'๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ํ…œํ”Œ๋ฆฟ ํ”„๋กœ์ ํŠธ ์—†์ด ์ตœ์†Œ ํ™˜๊ฒฝ์œผ๋กœ ์ฐฝ์ด ๋ Œ๋”๋ง๋ฉ๋‹ˆ๋‹ค.


profile
Coding Art with Blender / Three.js / p5.js / GLSL Shader / Processing / nannou

0๊ฐœ์˜ ๋Œ“๊ธ€