๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ˜ธ OpenGL

[Learn OpenGL] OpenGL

by HOENDEV 2023. 11. 15.

OpenGL

OpenGL์„ ๊ทธ๋ž˜ํ”ฝ๊ณผ ์ด๋ฏธ์ง€๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•œAPI๋กœ ์•Œ๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์ง€๋งŒ,

์‚ฌ์‹ค์€ OpenGL ์ž์ฒด๋Š” API๊ฐ€ ์•„๋‹ˆ๋ผ ๋‹จ์ˆœ ๋ช…์„ธ์— ๋ถˆ๊ณผ ํ•ฉ๋‹ˆ๋‹ค.

 

(http://www.khronos.org/)์—์„œ ๊ฐœ๋ฐœ ๋ฐ ์œ ์ง€

 

 

 

 

OpenGL ์‚ฌ์–‘์€ ๊ฐ ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ ๋ฐ ์ถœ๋ ฅ์ด ๋ฌด์—‡์ด์–ด์•ผ ํ•˜๋Š”์ง€์™€ ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜์–ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •ํ™•ํžˆ ๋ช…์‹œํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ ๋‹ค์Œ ์ด ์‚ฌ์–‘์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋“ค์ด ์ด๋Ÿฌํ•œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ํ•ด๊ฒฐ์ฑ…์„ ์ฐพ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

OpenGL ์‚ฌ์–‘์ด ๊ตฌํ˜„ ์„ธ๋ถ€์‚ฌํ•ญ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์ œ ๊ฐœ๋ฐœ๋œ OpenGL ๋ฒ„์ „๋“ค์€ ๊ฒฐ๊ณผ๊ฐ€ ์‚ฌ์–‘์— ๋ถ€ํ•ฉํ•˜๊ณ 

 

์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ๋™์ผํ•˜๊ฒŒ ์ œ๊ณต๋˜๋Š” ํ•œ ๋‹ค๋ฅธ ๊ตฌํ˜„์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

์‹ค์ œ OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์€ ๋Œ€๊ฐœ ๊ทธ๋ž˜ํ”ฝ ์ œ์กฐ์—…์ฒด๋“ค์ž…๋‹ˆ๋‹ค.

 

๊ตฌ๋งคํ•˜๋Š” ๊ฐ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋Š” ํ•ด๋‹น ์นด๋“œ์— ํŠน๋ณ„ํžˆ ๊ฐœ๋ฐœ๋œ OpenGL ๋ฒ„์ „์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

 

Apple ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๋•Œ๋Š” OpenGL ๋ผ์ด๋ธŒ๋Ÿด๊ฐ€ Apple ์ž์ฒด์— ์˜ํ•ด ์œ ์ง€๋˜๋ฉฐ,

 

๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ๊ทธ๋ž˜ํ”ฝ ๊ณต๊ธ‰์—…์ฒด์˜ ๋ฒ„์ „๊ณผ ์ทจ๋ฏธ๋กœ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ ์‘์‹œํ‚จ ๋ฒ„์ „์˜ ์กฐํ•ฉ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋Š” OpenGL์ด ์ด์ƒํ•œ ๋™์ž‘์„ ๋ณด์ด๋Š” ๊ฒฝ์šฐ, ๋Œ€๋ถ€๋ถ„ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์ œ์กฐ์—…์ฒด(๋˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ ์œ ์ง€ํ•˜๋Š” ์‚ฌ๋žŒ)

 

์˜ ์ž˜๋ชป์ผ ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

 

 

๋Œ€๋ถ€๋ถ„์˜ ๊ตฌํ˜„์ด ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ์ œ์กฐ์—…์ฒด์— ์˜ํ•ด ๋งŒ๋“ค์–ด์ง€๊ธฐ ๋•Œ๋ฌธ์—, ๊ตฌํ˜„์— ๋ฒ„๊ทธ๊ฐ€ ์žˆ์„ ๋•Œ ์ด๋Š” ๋ณดํ†ต

 

๊ทธ๋ž˜ํ”ฝ ์นด๋“œ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์—…๋ฐ์ดํŠธํ•จ์œผ๋กœ์จ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค.

 

์ด ๋“œ๋ผ์ด๋ฒ„๋“ค์€ ๋‹น์‹ ์˜ ์นด๋“œ๊ฐ€ ์ง€์›ํ•˜๋Š” OpenGL์˜ ์ตœ์‹  ๋ฒ„์ „์„ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์ด ๊ทธ๋ž˜ํ”ฝ ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ข…์ข… ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์ด ๊ถŒ์žฅ๋˜๋Š” ์ด์œ  ์ค‘ ํ•˜๋‚˜ ์ž…๋‹ˆ๋‹ค.

 

 

Khronos๋Š” ๋ชจ๋“  OpenGL ๋ฒ„์ „์— ๋Œ€ํ•œ ๋ชจ๋“  ์‚ฌ์–‘ ๋ฌธ์„œ๋ฅผ ๊ณต๊ฐœ์ ์œผ๋กœ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

 

๊ด€์‹ฌ์žˆ๋Š” ๋…์ž๋Š” ์•„๋ž˜ ๋งํฌ์—์„œ ๋ฒ„์ „ 3.3์˜ OpenGL ์‚ฌ์–‘์„ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

https://www.opengl.org/registry/doc/glspec33.core.20100311.withchanges.pdf

 

์„ธ๋ถ€์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋” ๊นŠ์ด ํŒŒ๊ณ ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด ์ฝ์„ ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

์‚ฌ์–‘์€ ๋˜ํ•œ ๊ทธ ๊ธฐ๋Šฅ์˜ ์ •ํ™•ํ•œ ์ž‘๋™ ๋ฐฉ์‹์„ ์ฐพ๋Š”๋ฐ ํ›Œ๋ฅญํ•œ ์ฐธ๊ณ ์ž๋ฃŒ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

 

 

Core-profile Vs Immediate mode

์˜›๋‚ ์—๋Š” OpenGL์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๊ฒƒ์€ Immediate mode(fixed function pipeline)์—์„œ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธ ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Š” ๊ทธ๋ž˜ํ”ฝ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด์—ˆ์Šต๋‹ˆ๋‹ค. OpenGL์˜ ๋Œ€๋ถ€๋ถ„ ๊ธฐ๋Šฅ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด๋ถ€์— ์ˆจ๊ฒจ์ ธ ์žˆ์—ˆ๊ณ ,

 

๊ฐœ๋ฐœ์ž๋“ค์€ OpenGL์ด ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด ๋งŽ์€ ํ†ต์ œ๊ถŒ์„ ๊ฐ–์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

๊ฐœ๋ฐœ์ž๋“ค์€ ๊ฒฐ๊ตญ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ์„ ์›ํ•˜๊ฒŒ ๋˜์—ˆ๊ณ  ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์‚ฌ์–‘๋„ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋” ์œ ์—ฐํ•ด์กŒ์œผ๋ฉฐ ๊ฐœ๋ฐœ์ž๋“ค์€

 

๊ทธ๋ž˜ํ”ฝ์— ๋Œ€ํ•œ ๋” ๋งŽ์€ ํ†ต์ œ๊ถŒ์„ ์–ป๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

Immediate mode๋Š” ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ์ดํ•ดํ•˜๊ธฐ๋„ ์‰ฝ์ง€๋งŒ, ๋งค์šฐ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์‚ฌ์–‘์€ ๋ฒ„์ „ 3.2๋ถ€ํ„ฐ immediate mode๋ฅผ ํ๊ธฐํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฉฐ

 

๊ฐœ๋ฐœ์ž๋“ค์ด OpenGL์˜ ์ฝ”์–ด ํ”„๋กœํŒŒ์ผ ๋ชจ๋“œ์—์„œ ๊ฐœ๋ฐœํ•˜๋„๋ก ํ•˜๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค.

 

 

OpenGL์˜ ์ฝ”์–ด ํ”„๋กœํŒŒ์ผ์„ ์‚ฌ์šฉํ•  ๋•Œ, OpenGL์€ ์šฐ๋ฆฌ์—๊ฒŒ ํ˜„๋Œ€์ ์ธ ๊ด€ํ–‰์„ ์‚ฌ์šฉํ•˜๋„๋ก ๊ฐ•์ œํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ OpenGL์˜ ํ๊ธฐ๋œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ•˜๋ฉด, OpenGL์€ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ๊ทธ๋ฆฌ๊ธฐ๋ฅผ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.

 

ํ˜„๋Œ€์ ์ธ ์ ‘๊ทผ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์˜ ์žฅ์ ์€ ๊ทธ๊ฒƒ์ด ๋งค์šฐ ์œ ์—ฐํ•˜๊ณ  ํšจ์œจ์ ์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฌ๋‚˜ ๋ฐฐ์šฐ๊ธฐ๋„ ๋” ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

 

ํ˜„๋Œ€์ ์ธ ์ ‘๊ทผ๋ฒ•์€ ๊ฐœ๋ฐœ์ž๊ฐ€ OpenGL๊ณผ ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ์ง„์ •์œผ๋กœ ์ดํ•ดํ•ด์•ผ ํ•˜๋ฉฐ, 

 

์•ฝ๊ฐ„ ๋” ์–ด๋ ต์ง€๋งŒ ํ›จ์”ฌ ๋” ๋งŽ์€ ์œ ์—ฐ์„ฑ, ํšจ์œจ์„ฑ์„ ์ œ๊ณตํ•˜๊ณ  ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๊ฒƒ์€ ๊ทธ๋ž˜ํ”ฝ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์— ๋Œ€ํ•œ

 

ํ›จ์”ฌ ๋” ๋‚˜์€ ์ดํ•ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

 

 

์˜ค๋Š˜๋‚ ์—๋Š” OpenGL์˜ ๋” ๋†’์€ ๋ฒ„์ „๋“ค์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๋ฐ ์™œ 3.3์„ ๋ฐฐ์›Œ์•ผ ํ•˜๋‚˜์š”?

 

์™œ๋ƒํ•˜๋ฉด 3.3๋ถ€ํ„ฐ ์‹œ์ž‘๋œ ๋ชจ๋“  ๋ฒ„์ „๋“ค์€ ํ•ต์‹ฌ ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ณ  ์œ ์šฉํ•œ ๊ธฐ๋Šฅ๊ณผ ์ตœ์ ํ™”๋งŒ ์ถ”๊ฐ€๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

 

 

๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋ ค๋ฉด, ๊ฐ€์žฅ ์ตœ์‹ ์˜ ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ๋งŒ์ด ๋‹น์‹ ์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๊ฒƒ์ด ๋Œ€๋ถ€๋ถ„์˜ ๊ฐœ๋ฐœ์ž๋“ค์ด ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋‚ฎ์€ ๋ฒ„์ „์˜ OpenGL์„ ํƒ€๊ฒŸ์œผ๋กœ ํ•˜๋Š” ์ด์œ ์ž…๋‹ˆ๋‹ค.

 

Extensions

OpenGL์˜ ํ›Œ๋ฅญํ•œ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์˜ ์ง€์›์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋ž˜ํ”ฝ ํšŒ์‚ฌ๊ฐ€ ์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์ด๋‚˜ ๋ Œ๋”๋ง์„ ์œ„ํ•œ ํฐ ์ตœ์ ํ™”๋ฅผ ๊ฐœ๋ฐœํ•  ๋•Œ, ์ด๋Š” ์ข…์ข… ๋“œ๋ผ์ด๋ฒ„์—์„œ ๊ตฌํ˜„๋œ ํ™•์žฅ ๊ธฐ๋Šฅ์œผ๋กœ ๋ฐœ๊ฒฌ๋ฉ๋‹ˆ๋‹ค.

 

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์‹คํ–‰๋˜๋Š” ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ด๋Ÿฌํ•œ ํ™•์žฅ์„ ์ง€์›ํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ์— ์˜ํ•ด ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜์—ฌ

 

๋” ์ง„๋ณด๋˜๊ฑฐ๋‚˜ ํšจ์œจ์ ์ธ ๊ทธ๋ž˜ํ”ฝ์„ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ OpenGL์˜ ๋ฏธ๋ž˜ ๋ฒ„์ „์— ๊ธฐ๋Šฅ์ด ํฌํ•จ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ , ๊ทธ๋ž˜ํ”ฝ ์นด๋“œ์—์„œ ํ™•์žฅ์ด ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•จ์œผ๋กœ

 

์ƒˆ๋กœ์šด ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

๊ฐœ๋ฐœ์ž๋Š” ์ด๋Ÿฌํ•œ ํ™•์žฅ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์ „์— ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€๋ฅผ ํ™•์ธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ์ง€ ์—ฌ๋ถ€์— ๋”ฐ๋ผ ๋” ๋‚˜์€ ๋ฐฉ๋ฒ•์ด๋‚˜ ๋” ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

if(GL_ARB_extension_name)
{
    // ํ•˜๋“œ์›จ์–ด๊ฐ€ ์ง€์›ํ•˜๋Š” ์ƒˆ๋กญ๊ณ  ํ˜„๋Œ€์ ์ธ ์ž‘์—… ์ˆ˜ํ–‰
}
else
{
    // ํ™•์žฅ ๊ธฐ๋Šฅ์ด ์ง€์›๋˜์ง€ ์•Š์Œ: ์˜ˆ์ „ ๋ฐฉ์‹๋Œ€๋กœ ์ˆ˜ํ–‰
}

 

State Machine

OpenGl ์ž์ฒด๋Š” ํฐ ์ƒํƒœ ๋จธ์‹ ์ž…๋‹ˆ๋‹ค.

 

OpenGL์ด ํ˜„์žฌ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•ด์•ผ ํ•˜๋Š”์ง€๋ฅผ ์ •์˜ํ•˜๋Š” ๋ณ€์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ์ž…๋‹ˆ๋‹ค.

 

OpenGL์˜ ์ƒํƒœ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ OpenGL context ๋ผ๊ณ  ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค. OpenGL์„ ์‚ฌ์šฉํ•  ๋•Œ,

 

์šฐ๋ฆฌ๋Š” ์ข…์ข… ๋ช‡ ๊ฐ€์ง€ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ , ๋ช‡ ๊ฐ€์ง€ ๋ฒ„ํผ๋ฅผ ์กฐ์ž‘ํ•˜๊ณ , ํ˜„์žฌ ์ปจํ…์ŠคํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ Œ๋”๋งํ•จ์œผ๋กœ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

 

 

์˜ˆ๋ฅผ ๋“ค์–ด, ์ด์ œ ์šฐ๋ฆฌ๊ฐ€ ์‚ผ๊ฐํ˜• ๋Œ€์‹  ์„ ์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ๋‹ค๊ณ  OpenGL์— ์•Œ๋ฆด ๋•Œ, OpenGL์ด ์–ด๋–ป๊ฒŒ ๊ทธ๋ คํ– ํ•˜๋Š”์ง€๋ฅผ

 

์„ค์ •ํ•˜๋Š” ์ปจํ…์ŠคํŠธ ๋ณ€์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•จ์œผ๋กœ์จ OpenGL์˜ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

 

OpenGL์— ์„ ์„ ๊ทธ๋ คํ•˜ ํ•œ๋‹ค๊ณ  ์•Œ๋ฆฌ๋Š” ์ปจํ…์ŠคํŠธ๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ˆœ๊ฐ„, ๋‹ค์Œ ๊ทธ๋ฆฌ๊ธฐ ๋ช…๋ น์€ ์ด์ œ ์‚ผ๊ฐํ˜• ๋Œ€์‹  ์„ ์„ ๊ทธ๋ฆฝ๋‹ˆ๋‹ค.

 

 

OpenGL์ด ๊ธฐ๋ณธ์ ์œผ๋กœ ํฐ ์ƒํƒœ ๋จธ์‹ ์ด๋ผ๋Š” ๊ฒƒ์„ ์—ผ๋‘์— ๋‘๋ฉด, ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ๋Šฅ์ด ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์›Œ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

Objects

OpenGL ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” C ์–ธ์–ด๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ์˜ ๋งŽ์€ ํŒŒ์ƒ์„ ํ—ˆ์šฉํ•˜์ง€๋งŒ,

 

๊ทธ ํ•ต์‹ฌ์€ C ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋‚จ์•„ ์žˆ์Šต๋‹ˆ๋‹ค.

 

C ์–ธ์–ธ์˜ ๋งŽ์€ ์–ธ์–ด ๊ตฌ์กฐ๊ฐ€ ๋‹ค๋ฅธ ๊ณ ๊ธ‰ ์–ธ์–ด๋กœ ์ž˜ ๋ณ€ํ™˜๋˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—, OpenGL์€ ์—ฌ๋Ÿฌ ์ถ”์ƒํ™”๋ฅผ ์—ผ๋‘์— ๋‘๊ณ 

 

๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ์ถ”์ƒํ™” ์ค‘ ํ•˜๋‚˜๊ฐ€ OpenGL์˜ ๊ฐ์ฒด ์ž…๋‹ˆ๋‹ค.

 

 

OpenGL์—์„œ ๊ฐ์ฒด๋Š” OpenGL์˜ ์ƒํƒœ์˜ ํ•˜์œ„ ์ง‘ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์˜ต์…˜๋“ค์˜ ๋ชจ์Œ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ทธ๋ฆฌ๊ธฐ ์ฐฝ์˜ ์„ค์ •์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ทธ ํ‚ค๊ธฐ, ์ง€์›ํ•˜๋Š” ์ƒ‰์ƒ ์ˆ˜ ๋“ฑ์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

 

๊ฐ์ฒด๋ฅผ C์Šคํƒ€์ผ์˜ ๊ตฌ์กฐ์ฒด๋กœ ์‹œ๊ฐํ™” ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

struct object_name {
    float  option1;
    int    option2;
    char[] name;
};

 

๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ ์ž ํ•  ๋•Œ, ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ ‡๊ฒŒ ๋ณด์ž…๋‹ˆ๋‹ค(OpenGL์˜ ์ปจํ…์ŠคํŠธ๋ฅผ ํฐ ๊ตฌ์กฐ์ฒด๋กœ ์‹œ๊ฐํ™”)

// OpenGL์˜ ์ƒํƒœ
struct OpenGL_Context {
  	...
  	object_name* object_Window_Target;
  	...  	
};

// ๊ฐ์ฒด ์ƒ์„ฑ
unsigned int objectId = 0;
glGenObject(1, &objectId);
// ์ปจํ…์ŠคํŠธ์— ๊ฐ์ฒด ๋ฐ”์ธ๋“œ/ํ• ๋‹น
glBindObject(GL_WINDOW_TARGET, objectId);
// ํ˜„์žฌ GL_WINDOW_TARGET์— ๋ฐ”์ธ๋“œ๋œ ๊ฐ์ฒด์˜ ์˜ต์…˜ ์„ค์ •
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH,  800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// ์ปจํ…์ŠคํŠธ ํƒ€๊ฒŸ์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ๋˜๋Œ๋ฆผ
glBindObject(GL_WINDOW_TARGET, 0);

 

์ด ์ž‘์€ ์ฝ”๋“œ ์กฐ๊ฐ์€ OpenGL์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฃผ ๋ณด๊ฒŒ ๋  ์›Œํฌํ”Œ๋กœ์šฐ์ž…๋‹ˆ๋‹ค.

 

๋จผ์ € ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  id๋กœ ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค(์‹ค์ œ ๊ฐ์ฒด ๋ฐ์ดํ„ฐ๋Š” ๋’ค์—์„œ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค).

 

๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ฐ์ฒด๋ฅผ ์ปจํ…์ŠคํŠธ์˜ ํƒ€๊ฒŸ ์œ„์น˜(์˜ˆ์ œ์˜ ์ฐฝ ๊ฐ์ฒด ํƒ€๊ฒŸ ์œ„์น˜๋Š” GL_WINDOW_TARGET๋กœ ์ •์˜๋จ)์— ๋ฐ”์ธ๋“œํ•ฉ๋‹ˆ๋‹ค(id๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ).

 

๋‹ค์Œ์œผ๋กœ ์ฐฝ ์˜ต์…˜์„ ์„ค์ •ํ•˜๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ์ฐฝ ํƒ€๊ฒŸ์˜ ํ˜„์žฌ ๊ฐ์ฒด id๋ฅผ 0์œผ๋กœ ์„ค์ •ํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์–ธ๋ฐ”์ธ๋“œํ•ฉ๋‹ˆ๋‹ค.

 

์šฐ๋ฆฌ๊ฐ€ ์„ค์ •ํ•œ ์˜ต์…˜๋“ค์€ objectId์— ์˜ํ•ด ์ฐธ์กฐ๋œ ๊ฐ์ฒด์— ์ €์žฅ๋˜๋ฉฐ, ๊ฐ์ฒด๋ฅผ GL_WINDOW_TARGET์— ๋‹ค์‹œ ๋ฐ”์ธ๋“œํ•˜๋ฉด ๋ณต์›๋ฉ๋‹ˆ๋‹ค.

 

์ง€๊ธˆ๊นŒ์ง€ ์ œ๊ณต๋œ ์ฝ”๋“œ ์ƒ˜ํ”Œ๋“ค์€ OpenGL์ด ์ž‘๋™ํ•˜๋Š” ๋ฐฉ์‹์˜ ๋Œ€๋žต์ ์ธ ์˜ˆ์‹œ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค;

 

์ฑ…์„ ํ†ตํ•ด ์ถฉ๋ถ„ํ•œ ์‹ค์ œ ์˜ˆ์‹œ๋“ค์„ ์ ‘ํ•˜๊ฒŒ ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๋Ÿฌํ•œ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์˜ ์žฅ์ ์€ ์šฐ๋ฆฌ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•˜๊ณ , ๊ทธ ์˜ต์…˜๋“ค์„ ์„ค์ •ํ•˜๊ณ , OpenGL์˜ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ž‘์—…์„ ์‹œ์ž‘ํ•  ๋•Œ๋งˆ๋‹ค ์šฐ๋ฆฌ๊ฐ€ ์„ ํ˜ธํ•˜๋Š” ์„ค์ •์œผ๋กœ ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด, 3D ๋ชจ๋ธ ๋ฐ์ดํ„ฐ(์ง‘์ด๋‚˜ ์บ๋ฆญํ„ฐ)๋ฅผ ์œ„ํ•œ ์ปจํ…Œ์ด๋„ˆ ๊ฐ์ฒด ์—ญํ• ์„ ํ•˜๋Š” ๊ฐ์ฒด๋“ค์ด ์žˆ๊ณ , ๊ทธ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ, ์šฐ๋ฆฌ๊ฐ€ ๊ทธ๋ฆฌ๊ณ ์ž ํ•˜๋Š” ๋ชจ๋ธ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ฐ”์ธ๋“œํ•ฉ๋‹ˆ๋‹ค(์ด ๊ฐ์ฒด๋“ค์„ ๋จผ์ € ์ƒ์„ฑํ•˜๊ณ  ์˜ต์…˜์„ ์„ค์ •ํ–ˆ์Šต๋‹ˆ๋‹ค).

 

์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉด ๋งŽ์€ ๋ชจ๋ธ์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๊ณ , ํŠน์ • ๋ชจ๋ธ์„ ๊ทธ๋ฆฌ๊ณ  ์‹ถ์„ ๋•Œ๋งˆ๋‹ค ๊ทธ์— ํ•ด๋‹นํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ๋‹จ์ˆœํžˆ ๋ฐ”์ธ๋“œํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋‹ค์‹œ ๋ชจ๋“  ์˜ต์…˜์„ ์„ค์ •ํ•  ํ•„์š” ์—†์ด ๋ง์ด์ฃ .

'๐Ÿ˜ธ OpenGL' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[Learn OpenGL] Hello Triangle - 4  (0) 2023.11.18
[Learn OpenGL] Hello Triangle - 3  (0) 2023.11.17
[Learn OpenGL] Hello Triangle - 2  (0) 2023.11.17
[Learn OpenGL] Hello Triangle - 1  (0) 2023.11.16
[Learn OpenGL] Creating a window(M1 Mac, Xcode)  (0) 2023.11.16