ํ™ˆ ๐Ÿ˜ŽOpenGLํ•˜๋‹ค ์—”์ง„โš™๏ธ ๋งŒ๋“ค์—ˆ๋‚˜โ“ ๋‚  ๊ตฌํ•ด์ค˜ ํŒ์ฝ˜์ฅฌ
ํฌ์ŠคํŠธ
์ทจ์†Œ

๐Ÿ˜ŽOpenGLํ•˜๋‹ค ์—”์ง„โš™๏ธ ๋งŒ๋“ค์—ˆ๋‚˜โ“ ๋‚  ๊ตฌํ•ด์ค˜ ํŒ์ฝ˜์ฅฌ

๊ฐœ์š”

ํ•™๊ต ์ˆ˜์—… ์ค‘ ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค๋ž€ ์ˆ˜์—…์„ ๋“ค์œผ๋ฉด์„œ OpenGL 2.0์„ ์ด์šฉํ•˜์—ฌ ๋ฒฝ๋Œ๊นจ๊ธฐ ๊ฒŒ์ž„์„ ๊ตฌํ˜„ํ•˜๋ผ๋Š” ๊ณผ์ œ๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์˜›๋‚ ์— ์˜ค๋ชฉ ๊ฒŒ์ž„์„ ๋งŒ๋“ค์–ด ๋ณด๋ฉด์„œ ์ž‘์ง€๋งŒ ์ €๋งŒ์˜ UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“ ์ ์ด ์žˆ์–ด UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋ฉด์„œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜๋ฉด ํŽธํ•˜๊ฒ ๋‹ค. ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ์ด๋ฏธ์ง€๋ฅผ ํ†ตํ•˜์—ฌ ๊น”๋”ํ•˜๊ณ , ๋ฌผ๋ฆฌ์—”์ง„์„ ํ†ตํ•˜์—ฌ ์ถฉ๋Œ์„ ํ•ด๊ฒฐ ํ•˜์ž! ๋ผ๋Š” ์ƒ๊ฐ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๊ฐœ๋ฐœ ๊ด€๋ จ ๊ธฐ๊ฐ„

  1. ์—”์ง„ ๊ฐœ๋ฐœ : 2~3์ผ
  2. ๋ฌผ๋ฆฌ ์—”์ง„ ๊ฐœ๋ฐœ : 1์ผ
  3. ์ด๋ฏธ์ง€, UI ๊ทธ๋ฆฌ๊ธฐ : 1์ผ
  4. ๋ฐœํ‘œ์šฉ ์ž๋ฃŒ ๋งŒ๋“ค๊ธฐ : 1์ผ ์ด ๊ธฐ๊ฐ„ : 3~4์ผ

๋ฆฌ์†Œ์Šค ๊ฐœ๋ฐœ ํ•ด์ฃผ์‹ ๋ถ„ : MFDO

์ ์šฉ๋œ ๊ธฐ์ˆ 

  1. ๊นจ์†Œ๊ธˆ ๊ฐ™์ง€๋งŒ ๋งˆ์šฐ์Šค ์ปค์„œ ์ปค์Šคํ…€
  2. ๋งˆ์šฐ์Šค ์ž…๋ ฅ (ํด๋ฆญ์„ ํ†ตํ•œ ๋ฐ˜์‘)

    hover, down, default ์ƒํƒœ๋ฅผ ๊ตฌํ˜„ ํ•จ.

  3. ์ด๋ฏธ์ง€ ์ถœ๋ ฅ๊ธฐ๋Šฅ์„ ์ด์šฉํ•œ ์• ๋‹ˆ๋ฉ”์ด์…˜ ๊ตฌํ˜„ํ•จ
  4. DaC ์™€ ๊ฐ™์€ ์ฝ”๋“œํ˜• ๋””์ž์ธ

    ๋ฒ„ํŠผ์ด๋‚˜, UI๋ฅผ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ด€์ธก์˜์—ญ์— ๋Œ€์ž…์„ ํ•ด์ฃผ๋ฉด ์ž๋™์ ์œผ๋กœ ๋ Œ๋”๋งํ•จ.

  5. ๋งต ์ปค์Šคํ…€ ๊ธฐ๋Šฅ
  6. ์ˆซ์ž ํฐํŠธ
  7. FMOD๋ฅผ ํ†ตํ•œ ๋™์‹œ ์žฌ์ƒ ๊ธฐ๋Šฅ
  8. Tick Rate๋ฅผ ํ†ตํ•œ ๋ฐฐ์†, ๋ Œ๋”๋ง ํ‹ฑ ๊ตฌํ˜„

๋‚ด๋ถ€ ๋™์ž‘ ์›๋ฆฌ

OpenGL์—์„œ UI๋ฅผ ๋น„๊ต์  ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•˜์—ฌ ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๋ฒค์น˜๋งˆํ‚น์„ ์ง„ํ–‰ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ณผ๊ฑฐ ๋น„๊ต์ ์œผ๋กœ ๋งŽ์ด ์‚ฌ์šฉํ–ˆ๊ณ , ๋กœ์šฐํ•˜๊ฒŒ ๋งŽ์ด ์‚ฌ์šฉํ•ด ๋ณด์•˜๋˜ Swift์˜ UIKit์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง„ํ–‰ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ๋น„๊ตํ•œ ๊ฒƒ์œผ๋กœ๋Š” WPF, Winform, UIKit, QT๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๊ทธ ์ค‘ ์ œ์ผ ๋กœ์šฐ ํ•˜๊ณ , ๋น„๊ต์  ๋ถ„์„์„ ๋งŽ์ด ํ–ˆ๋˜๊ฒƒ์€ UIKit ์ด์˜€๊ณ , Winform์ด๋‚˜ ๋‹ค๋ฅธ๊ฒƒ์€ ์ฌ๋” ๋งŽ์ด ๋‹ฌ๋ž์Šต๋‹ˆ๋‹ค.

๊ทธ๋ž˜์„œ UIKit๊ณผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ตฌํ˜„ํ•˜๊ณ ์ž ํ•˜์˜€์ง€๋งŒ, ์ด ๋ชจ๋“ ๊ฒƒ์„ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด 3์ผ ์ด๋ผ๋Š” ๊ธฐ๊ฐ„๋‚ด์— ์™„์„ฑํ•˜๋Š”๊ฒƒ์ด ๋งค์šฐ ์–ด๋ ค์šธ๊ฒƒ์ด๋ผ ํŒ๋‹จํ•˜์—ฌ ์„ ํƒ๊ณผ ์ง‘์ค‘์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ViewController๋Š” Scene์ด๋ผ๋Š” ๊ฐœ๋…์ด ๋˜๊ณ , Scene์•ˆ์— ๋‹ค์–‘ํ•œ View๊ฐ€ ์กด์žฌํ•˜๋Š” ํ˜•์‹์œผ๋กœ ์ง„ํ–‰ ํ•˜์˜€์œผ๋ฉฐ, View์— ๋ฌผ๋ฆฌ์—”์ง„์„ ๋„ฃ๊ธฐ ์œ„ํ•˜์—ฌ View๋ฅผ ์ƒ์† ๋ฐ›๋Š” PhysicsView๋ผ๋Š” ์ถ”์ƒ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ฌผ๋ฆฌ ์—”์ง„์ด ํ•„์š”ํ•œ ์š”์†Œ๋Š” ํ•ด๋‹น PhysicsView๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆ์šฐ์Šค์™€ ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์ด ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ Scene์ด๋‚˜ Application ๋‹จ์—์„œ ์ ์ •ํ•œ View์— ์ „ํŒŒํ•˜๋Š”๊ฒƒ์ด ์•„๋‹Œ, ์ผ๋‹จ ๋ชจ๋“  View์—๊ฒŒ ์ „ํŒŒํ•˜๊ณ , View๊ฐ€ ์„ ํƒํ•˜์—ฌ ์ž์‹ ์—๊ฒŒ ์˜จ ๋ฐ์ดํ„ฐ ์ธ์ง€ ์•„๋‹Œ์ง€ ๊ฒ€์ฆํ•˜์—ฌ ์‹คํ–‰ ํ•˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ฒ€์ฆ ํ•˜๋Š” ์ฝ”๋“œ ์ค‘ ํ•˜๋‚˜๊ฐ€ ํ˜„์žฌ View๊ฐ€ Hidden ์ธ์ง€ ์•„๋‹Œ์ง€ ์ฒดํฌ ํ•ฉ๋‹ˆ๋‹ค.

์ฆ‰ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ทธ๋ฆผ์œผ๋กœ ํ‘œํ˜„ ํ•œ๋‹ค๋ฉด ์•„๋ž˜์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ ๋ฉ๋‹ˆ๋‹ค.

main

๋งค๋ฒˆ ๋ Œ๋”๋ง์ด๋‚˜, ํ‚ค๋ณด๋“œ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค๋ฉด Application์—์„œ ๋ฐ›๊ณ , ํ˜„์žฌ ํ™œ์„ฑํ™”๊ฐ€ ๋˜์–ด์žˆ๋Š” Scene์—๊ฒŒ ์ „์†กํ•˜๊ฒŒ ๋˜๊ณ , Scene์—์„œ ๋ชจ๋“  View์— ์ „ํŒŒํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ตœ์ ํ™”์™€, ๋งˆ์šฐ์Šค ์ž…๋ ฅ๊ณผ, ์ด๋ฏธ์ง€ ์ถœ๋ ฅ ๊ธฐ๋Šฅ๊ณผ ๊ฐ™์€ ๋ฒ ์ด์Šค๋ฅผ ๊ตฌํ˜„ ํ•˜๋ฉด ๋‚˜๋จธ์ง€ ๊ธฐ๋Šฅ์„ ์ž์œ ๋กญ๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

Application์—์„œ ๋ชจ๋“  ๊ธฐ์ดˆ ๋ฒ ์ด์Šค๋ฅผ ๋‹ด๋‹นํ•˜๊ธฐ ๋•Œ๋ฌธ์— TickRate๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜, Tick์„ ๋ฐœ์ƒํ•˜๋Š”๊ฒƒ๋„ ๋ชจ๋‘ Application์—์„œ ๋‹ด๋‹นํ•˜๋ฏ€๋กœ, ์ผ๊ด„์ ์ธ ๋ณ€๊ฒฝ, ํŠน์ • Scene์—๋งŒ ๋ฐ”๊พธ๊ฑฐ๋‚˜ ํ•˜๋Š” ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

DaC, ์ฝ”๋“œํ˜• ๋””์ž์ธ ์ด๋ž€?

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๋ถ€ ๋™์ž‘์˜ ์›๋ฆฌ๋ฅผ ๋ถ„์„ํ•˜๊ฒŒ ๋˜๋ฉด โ€œSceneโ€์— ์—ฐ๊ฒฐ์ด ๋˜์–ด ์žˆ๋‹ค๋ฉด UI๋‚˜, ๋ฌด์–ธ๊ฐ€๊ฐ€ ๊ทธ๋ ค์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— View ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑ์„ ํ•˜๊ธฐ๋งŒ ํ•˜๋”๋ผ๋„ ๊ทธ๋ ค์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  View๊ฐ„ ๊ด€๊ณ„ํ˜•์ด๋‚˜, View๊ฐ€ ์–ด๋–ค Scene์— ์žˆ๋Š”์ง€ ์–ด๋–ค ์š”์†Œ๊ฐ€ ์žˆ๋Š”์ง€, ์–ด๋–ค ์ด๋ฏธ์ง€๋ฅผ ์“ฐ๋Š”์ง€ ์ฝ”๋“œ๋กœ ์„ ์–ธ์„ ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜์˜ ์ด๋ฏธ์ง€ ์ฒ˜๋Ÿผ View์— ๋Œ€ํ•œ ๊ด€๊ณ„์„ฑ์„ ์ž…๋ ฅํ•˜๊ณ , ์–ด๋–ค ์Šคํ”„๋ผ์ดํŠธ๋ฅผ ๊ทธ๋ฆด๊ฒƒ์ธ์ง€ ๋„˜๊ฒจ์ฃผ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

main

๊ทธ๋Ÿฌ๋ฉด ์ž๋™์ ์œผ๋กœ Application์˜ ์ฃผ๊ธฐ์— ๋”ฐ๋ผ, Scene์ด ๋ Œ๋”๋ง์ด ๋  ๋•Œ ๊ทธ๋ ค์ง‘๋‹ˆ๋‹ค.

๋‹ค์šด๋กœ๋“œ ๋งํฌ

โ—† ๊ฒŒ์ž„ ๋‹ค์šด๋กœ๋“œ ๋งํฌ :
https://github.com/Piorosen/opengl-popcornjoo/releases/download/v1.0.0/PopcornJoo.zip

โ—† ๊ฒŒ์ž„ ์†Œ์Šค ์ฝ”๋“œ :
https://github.com/Piorosen/opengl-popcornjoo

๋ฐœํ‘œ ์˜์ƒ

main ๋ฐœํ‘œ ์˜์ƒ {: .text-center } ์ด๋ฏธ์ง€

๋ฐœํ‘œ ์ด๋ฏธ์ง€

main main main main main main main main main main main main

์ด ๊ธฐ์‚ฌ๋Š” ์ €์ž‘๊ถŒ์ž์˜ CC BY 4.0 ๋ผ์ด์„ผ์Šค๋ฅผ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

ํ•™๊ณผ ์„œ๋ฒ„ ์ˆ˜์š”์™€ ํ™œ์šฉ๋ฐฉ์•ˆ [๋ณด๊ณ ์„œ]

Nuget๊ณผ Vcpkg๋ฅผ ํ™œ์šฉํ•œ C++๊ณผ C# ํŒจํ‚ค์ง€ ๊ด€๋ฆฌ

์ธ๊ธฐ ํƒœ๊ทธ