์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ
Laurent Gomila
ํ”Œ๋žซํผ
์žฅ๋ฅด
๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด API
๋ผ์ด์„ผ์Šค
2.0 zlib/png license
์›น์‚ฌ์ดํŠธ


1. ๊ฐœ์š”2. ์ƒ์„ธ3. ์ฃผ์˜์ 4. ์žฅ์ 5. ๋‹จ์ 6. ์„ค์น˜๋ฒ•7. SFML๋กœ ๊ฐœ๋ฐœ๋œ ๊ฒŒ์ž„



1. ๊ฐœ์š”[ํŽธ์ง‘]

SFML(Simple and Fast Multimedia Library)์€ ํ”„๋ž‘์Šค์˜ Laurent Gomila์‚ฌ๊ฐ€ ๋งŒ๋“  ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด API์ด๋‹ค. ๊ธฐ์กด์˜ ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด API์ธ Simple DirectMedia Layer (SDL)์„ ๋Œ€์ฒดํ•˜๋ ค๋Š” ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์กŒ์œผ๋ฉฐ, ์ฒ˜์Œ์—๋Š” C++์— ๊ธฐ๋ฐ˜ํ–ˆ์œผ๋‚˜ ๋ฒ„์ „์—…์„ ๊ณ„์†ํ•˜๋ฉด์„œ C#์ด๋‚˜ Java, ์‹ฌ์ง€์–ด๋Š” ํŒŒ์ด์ฌ, ๋ฃจ๋น„์™€ ๊ฐ™์€ ๋‹ค์–‘ํ•œ ์–ธ์–ด๋ฅผ ์ง€์›ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ๋ฉ€ํ‹ฐ๋ฏธ๋””์–ด ๋‹ต๊ฒŒ ๊ทธ๋ž˜ํ”ฝ, ์‚ฌ์šด๋“œ, ์ž…์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ๋“ฑ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ง€์›ํ•œ๋‹ค. ์ตœ์‹  ๋ฒ„์ „์€ 2.5์ด๋‹ค.

2. ์ƒ์„ธ[ํŽธ์ง‘]

SFML์˜ ์žฅ์ ์€ ๋น ๋ฅด๊ณ  ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์ ์ด๋ผ๋Š” ๊ฒƒ์— ์žˆ๋‹ค. SDL์ด C์–ธ์–ด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ๋งŒ๋“ค์–ด์ ธ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๊ณ ๋ ค๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์€๋ฐ ๋น„ํ•ด, ์ฒ˜์Œ๋ถ€ํ„ฐ ๊ฐ์ฒด์ง€ํ–ฅ์ ์ธ ๊ฐœ๋ฐœ์„ ์—ผ๋‘์— ๋‘๊ณ  ๋งŒ๋“  API๋ผ์„œ ํ˜„๋Œ€์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด(C#, JAVA)์—์„œ๋„ ๋Œ€์‘ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. ๋˜ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ง๊ด€์ ์ด๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์— ์ต์ˆ™ํ•ด์žˆ๋‹ค๋ฉด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์–ด๋ ค์›€์ด ์ ๋‹ค. ๋‹ค์‹œ๋งํ•ด ํŽธํ•˜๊ณ  ์‰ฝ๋‹ค. ๊ทธ๋ž˜ํ”ฝ API ์ค‘ ์‰ฝ๋‹ค๊ณ  ์†Œ๋ฌธ๋‚œ SDL๋ณด๋‹ค ๋” ์‰ฝ๋‹ค. ์‚ฌ์šฉํŽธ์˜์„ฑ๋งŒ ์น˜๋ฉด ๊ณผ๊ฑฐ ๋ณผ๋žœ๋“œ์‚ฌ์—์„œ ๊ฐœ๋ฐœํ•œ winbgi์™€ ๋งž๋จน์„ ์ •๋„๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๊ฑด ๊ทธ๋ž˜ํ”ฝ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‚ฌ์šด๋“œ, ์ž…์ถœ๋ ฅ, ๋„คํŠธ์›Œํฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊นŒ์ง€ ๋œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ๋„ ๋น ๋ฅด๊ธฐ๊นŒ์ง€ ํ•˜๋‹ค..

3. ์ฃผ์˜์ [ํŽธ์ง‘]

์ผ๋ฐ˜์ ์ธ ๊ทธ๋ž˜ํ”ฝ API์™€ ๋‹ค๋ฅธ ๋‹จ์œ„๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ๋“ค์ด ๋ช‡๋ช‡ ์žˆ์–ด ์ฃผ์˜๋ฅผ ์š”๊ตฌํ•œ๋‹ค. ์˜ˆ : Vertex์— ๋“ค์–ด๊ฐ€๋Š” UV๊ฐ€ ์ผ๋ฐ˜์ ์ธ API๋Š” ๋งจ ๋์ด 1์ด์ง€๋งŒ SFML์€ ํ”ฝ์…€๋‹จ์œ„๋กœ ๋„ฃ์–ด์ค˜์•ผํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ƒ๊ฐํ•˜๊ธฐ์—” ๋” ํŽธํ•˜์ง€๋งŒ ์‚ฌ์–‘์—๋”ฐ๋ผ ๊ณ ํ•ด์ƒ๋„ ๋ฆฌ์†Œ์Šค๋ฅผ ์ œ๊ณตํ•œ๋‹ค๋˜๊ฐ€ ํ•˜๋Š” ๊ตฌํ˜„์— ์žˆ์–ด์„œ๋Š” ๋งค์šฐ ๋ถˆํŽธํ•œ ๊ตฌ์„ฑ. ๊ฐ๋„๋„ ๋ผ๋””์•ˆ์ด ์•„๋‹ˆ๋ผ ์œก์‹ญ๋ถ„๋ฒ•์œผ๋กœ ๋„ฃ๋Š”๋‹ค.

4. ์žฅ์ [ํŽธ์ง‘]

  • ํฌ๋กœ์Šค ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    2018๋…„ ๊ธฐ์ค€ ์œˆ๋„์šฐ. ๋ฆฌ๋ˆ…์Šค, ๋งฅOS, ์•ˆ๋“œ๋กœ์ด๋“œ, IOS๋ฅผ ์ง€์›ํ•œ๋‹ค.
  • ๋‹ค์–‘ํ•œ ์–ธ์–ด ์ง€์›
    SFML์€ C++ ์œ„์ฃผ๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์ง€๋งŒ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ๋„ ๋ฐ”์ธ๋”ฉ ๋˜์–ด์žˆ๋‹ค. ํ˜„์žฌ ์ง€์›ํ•˜๋Š” ์–ธ์–ด๋Š” ์—ฌ๊ธฐ์„œ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋Œ€๋ถ€๋ถ„ ์ตœ์‹  ๋ฒ„์ „์„ ๋น ๋ฅด๊ฒŒ ๋”ฐ๋ผ ๊ฐ€๊ณ  ์žˆ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์—ญ์‹œ C++์ด ๊ฐ€์žฅ ๋น ๋ฅด๋‹ค.
  • ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์— ๋น„ํ•ด ๋งค์šฐ ์‰ฝ๋‹ค.
    ๊ณต์‹ ์‚ฌ์ดํŠธ์˜ ํŠœํ† ๋ฆฌ์–ผ ํ•˜๋‚˜๋งŒ ๋ณด๊ณ ๋„ ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๊ณ  api๋“ค์ด ์‚ฌ์ดํŠธ์— ์ฒด๊ณ„์ ์œผ๋กœ ์ •๋ฆฌ๋˜์žˆ์œผ๋ฉฐ ์˜ˆ์‹œ๋„ ์ ํ˜€ ์žˆ์œผ๋ฏ€๋กœ ๊ฐ„๋‹จํ•œ ์˜์–ด๋งŒ ์•Œ์•„๋„ ์˜ˆ์‹œ๋งŒ ๋ณด๊ณ  ๋งŒ๋“ค์–ด ๋ณผ ์ˆ˜ ์žˆ์„ ์ •๋„๋‹ค.

5. ๋‹จ์ [ํŽธ์ง‘]

์žฅ์ ๋„ ๋งŽ์ง€๋งŒ, ๋‹จ์ ๋„ ๊ฝค ๋งŽ๋‹ค. ์šฐ์„  ๋งˆ์ด๋„ˆํ•˜๋‹ค. SDL์€ ๊ฐœ๋ฐœ๋œ์ง€ ๊ฝค ๋œ ๋ฌผ๊ฑด์ด๋ผ์„œ ๋งŽ์ด ์‚ฌ์šฉ๋˜์–ด์™”๊ณ  ์ƒ์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ๋„ ๋„๋ฆฌ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋‹ค.[1] ๋ฐ˜๋ฉด์— SFML์€ ๊ทธ๋Ÿญ์ €๋Ÿญ ์“ธ๋งŒํ•˜๋‹ค๊ณ  ํ‰๊ฐ€๋ฐ›๋Š” 1.6 ๋ฒ„์ „์ด ๋‚˜์˜จ๊ฒŒ 2010๋…„. ๊ด€๋ก์˜ ์ฐจ์ด๋Š” ๊ด€๋ จ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ๊ทœ๋ชจ, ๊ด€๋ จ ๊ฐœ๋ฐœ ๋„์„œ, ๋ ˆํผ๋Ÿฐ์Šค, ์†Œ์Šค ๋“ฑ๋“ฑ์˜ ์ฐจ์ด๋กœ ๋‚˜ํƒ€๋‚˜์„œ ๊ฐœ๋ฐœ์— ์–ด๋ ค์›€์„ ๊ฒช๊ฒŒ ํ•œ๋‹ค. ์ผ๋ก€๋กœ SDL์€ ๊ด€๋ จ ์„œ์ ์ด 10์ข… ์ด์ƒ ์ถœ๊ฐ„๋˜์—ˆ์œผ๋‚˜ SFML์€ ์ฒซ ๊ฐœ๋ฐœ ๋„์„œ์ธ <SFML Game Development>๊ฐ€ 2013๋…„ 6์›” 24์ผ ์ถœ๊ฐ„๋˜์—ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ  SDL ๋ณด๋‹ค ๊ตญ๋‚ด ์ž๋ฃŒ๊ฐ€ ๋ถ€์กฑํ•˜๋‹ค, ์•„๋‹ˆ ์•„์˜ˆ ์—†๋Š” ์ˆ˜์ค€์ด๋‹ค. ๊ตญ๋‚ด์— ์ถœ๊ฐ„๋œ SFML ๊ด€๋ จ ๊ต์žฌ๋Š” ํ˜„์žฌ ๋”ฑ ํ•œ ๊ถŒ ๋ฟ์ด๋ฉฐ, ๊ทธ๋‚˜๋งˆ๋„ ์ดˆ๊ธ‰์ž์šฉ ๋ง›๋ณด๊ธฐ ์ˆ˜์ค€์ด๋‹ค.[2] ์™ธ๊ตญ์—์„œ๋„ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€ ์™ธ์—๋Š” ํ™œ๋ฐœํ•œ ํŽธ์ธ ์‚ฌ์ดํŠธ๊ฐ€ ์—†์–ด์„œ ๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ Tutorial์ด๋‚˜ Open-sourced game์„ ๋œฏ์–ด์„œ ์†Œ์Šค๋ฅผ ์‚ดํŽด๋ณด๊ณ  ๊ณต๋ถ€ํ•˜๋Š” ๊ฒƒ ์™ธ์—๋Š” ๋ฐฉ๋ฒ•์ด ๊ฑฐ์˜ ์—†๋‹ค. ๊ทธ๋ž˜๋„ ํ™ˆํŽ˜์ด์ง€์— ๊ฐ•์ขŒ๊ฐ€ ๊ฝค ์ž์„ธํ•˜๊ฒŒ ๋‚˜์™€์žˆ๋Š” ํŽธ์ด๋ฏ€๋กœ ์˜์–ด๋ฅผ ์กฐ๊ธˆ ํ•  ์ค„ ์•ˆ๋‹ค๋ฉด ์ด๊ณณ์—์„œ ๊ณต๋ถ€๋ฅผ ํ•˜์ž.

SFML์˜ ๋ฏธ๋ž˜๋Š” ์•„์ง์€ ๋ถˆํˆฌ๋ช…ํ•˜์ง€๋งŒ, ์žฅ๊ธฐ์ ์œผ๋กœ SDL์˜ ์œ„์น˜๋ฅผ ์œ„ํ˜‘ํ•  ์ˆ˜ ์žˆ์„๊ฑฐ๋ผ ์ „๋ง๋œ๋‹ค. ์ผ๋‹จ ๊ฐ์ฒด์ง€ํ–ฅ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ ์ ์ด ๊ฐœ๋ฐœ์— ๊ต‰์žฅํ•œ ๋ฉ”๋ฆฌํŠธ๋ฅผ ๊ฐ–๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด๊ฑฐ ํ•˜๋‚˜๋งŒ์œผ๋กœ SFML์„ ์“ธ ์ด์œ ๋Š” ์ถฉ๋ถ„ํ•˜๋‹ค.

6. ์„ค์น˜๋ฒ•[ํŽธ์ง‘]

๊ณต์‹ ํ™ˆํŽ˜์ด์ง€์˜ ํŠœํ† ๋ฆฌ์–ผ ํŽ˜์ด์ง€์˜ Getting started ๋ถ€๋ถ„์— SFML์ด ์ง€์›ํ•˜๋Š” ์šด์˜์ฒด์ฒด๋“ค์˜ ์„ค์น˜ ๋ฐฉ๋ฒ•์ด ๋‚˜์™€์žˆ๋‹ค.

7. SFML๋กœ ๊ฐœ๋ฐœ๋œ ๊ฒŒ์ž„[ํŽธ์ง‘]

[1] ๋Œ€ํ‘œ์ ์œผ๋กœ ๋ฌธ๋ช… ์ฝœ ํˆฌ ํŒŒ์›Œ์™€ ์‹ฌ์‹œํ‹ฐ 3000์˜ ๋ฆฌ๋ˆ…์ŠคํŒ, ์„ธ์ปจํŠธ ๋ผ์ดํ”„, Open TTD ๋“ฑ์ด ์žˆ๋‹ค.
[2] ์ •์ž‘ ์ดˆ๊ธ‰์ž์šฉ ๋ง›๋ณด๊ธฐ ์ˆ˜์ค€์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์ž‘๊ฐ€๊ฐ€ ์•„๋ฌด๋ž˜๋„ SFML ๋น ๋Œ์ด์ธ๊ฐ€ ์˜์‹ฌ์Šค๋Ÿฌ์šธ ์ •๋„๋กœ C++๋กœ GUI ๊ฐœ๋ฐœํ•˜๋ ค๋ฉด MFC๋‚˜ Qt ๊ฐ™์€ ๊ฑธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค SFML์„ ์“ฐ๋Š” ๊ฒŒ ํ›จ์”ฌ ๋” ๋‚ซ๋‹ค๊ณ  ํ™๋ณด์ฃผ์žฅํ•œ๋‹ค. ์ž‘๊ฐ€ ๊ฐœ์ธ์˜ ์ทจํ–ฅ์ธ์ง€ ์–ด๋–ค์ง€๋Š” ๋…์ž๋“ค ์Šค์Šค๋กœ ํŒ๋‹จํ•  ๊ฒƒ