728x90

 

๋ณธ ํฌ์ŠคํŒ…์˜ ๋ชฉํ‘œ๋Š” 1ํŽธ์—์„œ ๋ณด์—ฌ์ฃผ์—ˆ๋˜ ์ฐฝ์— ์‚ผ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๋Š”๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์‚ผ๊ฐํ˜•์„ ๊ทธ๋ฆฌ๊ธฐ ์ „์— ๋จผ์ € ์•Œ์•„์•ผํ•  ๊ฒƒ๋“ค์„ ์ƒ๊ฐํ•ด๋ณด์ž.

OpenGL์˜ ๋™์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํŒŒ์•…ํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ์˜ ์ „์ฒด์ ์ธ ํ๋ฆ„์„ ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

์‚ผ๊ฐํ˜•์„ ๊ทธ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

์šฐ๋ฆฌ๋Š” ์‚ผ๊ฐํ˜•์˜ ์ •๋ณด ๋ฐ์ดํ„ฐ๋“ค์„ ํ™”๋ฉด์— ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•ด์„œ ์ปดํ“จํ„ฐ์—๊ฒŒ ์•Œ๋ ค์ค˜์•ผํ•œ๋‹ค.

์ผ๋ จ์˜ ์ฒ˜๋ฆฌ๋“ค์„ ๊ฑฐ์ณ์„œ ์ปดํ“จํ„ฐ๋Š” ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

์ผ๋ จ์˜ ์ฒ˜๋ฆฌ๋“ค์€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํ˜•ํƒœ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋Š”๋ฐ

GL์€ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

'ํ•œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋‹จ๊ณ„์˜ ์ถœ๋ ฅ์ด ๋‹ค์Œ ๋‹จ๊ณ„์˜ ์ž…๋ ฅ์œผ๋กœ ์ด์–ด์ง€๋Š” ํ˜•ํƒœ๋กœ ์—ฐ๊ฒฐ๋œ ๊ตฌ์กฐ'๋ฅผ ํŒŒ์ดํ”„๋ผ์ธ์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

ํŒŒ์ดํ”„๋ผ์ธ

 

ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์กฐ๋Š” ์ผ์ข…์˜ ๋ถ„์—… ์ฒด์ œ์ด๋‹ค.

๊ทธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ ์ž‘์—…์„ ๊ธฐ๋Šฅ๋ณ„๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ด๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•œ ๊ฒƒ์ด๋‹ค.

๊ธฐ๋Šฅ๋ณ„๋กœ ์„ธ๋ถ„ํ™”ํ•˜์—ฌ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์น˜ํ•˜๋ฉด ์—ฌ๋Ÿฌ ๋‹จ๊ณ„๊ฐ€ ์„œ๋กœ ๋™์‹œ์—, ๋˜๋Š” ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ์–ด ํšจ์œจ์„ฑ์ด ๋†’์•„์ง€๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

OpenGL ํŒŒ์ดํ”„ ๋ผ์ธ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒ„ํ…์Šค ํŒจ์น˜, ๋ฒ„ํ…์Šค ์‰์ด๋”, ํ…Œ์…€๋ ˆ์ด์…˜, ์ง€์˜ค๋ฉ”ํŠธ๋ฆฌ ์‰์ดํ„ฐ, ๋ž˜์Šคํ„ฐํ™”, ํ”„๋ž˜๊ทธ๋จผํŠธ ์‰์ด๋”, ํ”„๋ ˆ์ž„ ๋ฒ„ํผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ํ•„์ˆ˜๋ถ€๋ถ„๋„ ์žˆ๊ณ  ํ•„์ˆ˜๊ฐ€ ์•„๋‹Œ๋ถ€๋ถ„๋„ ์žˆ๋‹ค.

ํ•„์ˆ˜๋ถ€๋ถ„๋“ค์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ชจ๋‘ ํ•˜๋“œ์›จ์–ด์— ์˜ํ•ด ๊ตฌํ˜„๋œ๋‹ค.

๊ณ ์ •๋œ ํŒŒ์ดํ”„๋ผ์ธ์€ ์ฒ˜๋ฆฌ ์ˆœ์„œ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜๋Š” ์—†๊ณ  ํ”„๋กœ์„ธ์„œ์— ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์ผ์„ ํ•œ๋‹ค.

์•„๋ž˜๊ทธ๋ฆผ์€ ๊ณ ์ •ํ•จ์ˆ˜์™€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋Š” ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ธ”ํ•จ์ˆ˜๋กœ ์ด๋ฃจ์–ด์ง„ OpenGL ํŒŒ์ดํ”„๋ผ์ธ์ด๋‹ค.

์ƒ๋žตํ•˜๊ฑฐ๋‚˜ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ

OpenGL ํŒŒ์ดํ”„๋ผ์ธ

์–ผ๋งˆ์ „์— ๋ฉด์ ‘์—์„œ Fixed Function Pipeline ์•„์‹œ๋ƒ๋Š” ์งˆ๋ฌธ์„ ๋ฐ›์•˜๋Š”๋ฐ ๊ทธ๊ฒŒ ๊ณ ์ •ํ•จ์ˆ˜ ๋งํ•˜๋Š”๊ฑด์ง€ ๋ชจ๋ฅด๊ณ  ์–ด๋ฒ„๋ฒ„ ๊ฑฐ๋ ธ๋‹ค.. ์˜์–ด๋กœ๋„ ์•Œ์•„๋†“์ž..

 

 

1. ๋ฒ„ํ…์Šค ํŒจ์น˜(๋ฒ„ํ…์Šค ํ’€๋ง(์ •์  ํ’€๋ง)) & ๋ฒ„ํ…์Šค ์‰์ด๋”

OpenGL ํŒŒ์ดํ”„๋ผ์ธ

* ๋ฒ„ํ…์Šค ํŒจ์น˜

์ž๋™์ ์œผ๋กœ ๋ฒ„ํ…์Šค ์‰์ด๋”์— ์ž…๋ ฅ์„ ์ œ๊ณตํ•˜๋Š” ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

์œ ์ผํ•œ ํ•„์ˆ˜ ์Šคํ…Œ์ด์ง€์ด๋‹ค.

 

์ œ์ผ ์ฒซ๋ฒˆ์งธ ๋ฒ„ํ…์Šค ํŒจ์น˜(Vertex Fetch)๊ฐ€ ๋ฌด์—‡์ด๋ƒ

Fetch๋ถ€ํ„ฐ ์•Œ์•„๋ณด์ž

https://www.computerhope.com/jargon/f/fetch.htm

์ด ์‚ฌ์ดํŠธ์— ๋”ฐ๋ฅด๋ฉด Fetch(๊ฐ€์ ธ์˜ค๊ธฐ)๋ž€ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ๊ทธ๋žจ, ์Šคํฌ๋ฆฝํŠธ ๋˜๋Š” ํ•˜๋“œ์›จ์–ด ์žฅ์น˜์— ์˜ํ•œ ๋ฐ์ดํ„ฐ ๊ฒ€์ƒ‰์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ๋ฒ„ํ…์Šค ํŒจ์น˜๋ž€ ๋ง๊ทธ๋Œ€๋กœ ์ •์ ์„ ๊ฐ€์ ธ์˜จ๋‹ค๋Š” ๋ง์ด๋‹ค.

๋ฒ„ํ…์Šค ํŒจ์น˜/๋ฒ„ํ…์Šค ํŒจ์นญ/input assembler ๋“ฑ๋“ฑ ๋ถ€๋ฅด๋Š” ๋ช…์นญ์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๋˜๋ฐ ์ •์ ์„ ์ž…๋ ฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด๋ผ ๋ณด๋ฉด ๋œ๋‹ค.

 

* ๋ฒ„ํ…์Šค ์‰์ด๋”

๊ฐ€์ ธ์˜จ ํ›„์—๋Š” ๋‘๋ฒˆ์งธ ๋ฒ„ํ…์Šค ์‰์ด๋”(Vertex Shader) ๊ณผ์ •์ด๋‹ค.

๋ฒ„ํ…์Šค ์‰์ด๋”๋Š” 

https://ko.wikipedia.org/wiki/%EB%B2%84%ED%85%8D%EC%8A%A4_%EC%85%B0%EC%9D%B4%EB%8D%94

์—ฌ๊ธฐ์— ๋‚˜์™€์žˆ๋“ฏ์ด ๋ฌผ์ฒด์˜ ์ •์  ์ •๋ณด์— ์ˆ˜ํ•™์ ์ธ ์—ฐ์‚ฐ์„ ํ•จ์œผ๋กœ์จ ๋ฌผ์ฒด์— ํŠน๋ณ„ํ•œ ํšจ๊ณผ๋ฅผ ์ฃผ๋Š”๋ฐ ์“ฐ์ธ๋‹ค๊ณ  ํ•œ๋‹ค.

์ •์  ์ •๋ณด๋Š” ์œ„์น˜ ์ขŒํ‘œ, ์ƒ‰์ƒ, ํ…์Šค์ฒ˜, ์กฐ๋ช… ์ •๋ณด ๋“ฑ ๋‹ค์–‘ํ•˜๊ฒŒ ๋“ค์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ๊ธฐ์กด์˜ ์ •์ ์„ ์ง€์šฐ๊ฑฐ๋‚˜ ์ƒˆ๋กœ์šด ์ •์ ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์ด ๋ง์ด ๋ฌด์Šจ๋ง์ด๋ƒ๋ฉด,

๋งŒ์•ฝ ์ •์ ์ด X0,X1,X2์˜ ์œ„์น˜ ์ขŒํ‘œ๋กœ์จ ์ด์™€๊ฐ™์ด ๋“ค์–ด์™”๋‹ค๋ฉด ์‰์ด๋” ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒˆ๋กœ์šด X4 ์ขŒํ‘œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค๋˜์ง€ ํ˜น์€ ๋“ค์–ด์˜จ X0,X1,X2์˜ ์›๋ณธ ์ขŒํ‘œ๋ฅผ ๋ฐ”๊พผ๋‹ค๋˜์ง€์˜ ์ž‘์—…์€ ์•ˆ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๐Ÿ‘† ํ•˜์ง€๋งŒ ์œ ์˜ํ•ด์•ผํ•  ์ ์ด ์›๋ณธ์„ ๋ฐ”๊พธ์ง€ ๋ชปํ•˜๋Š” ๊ฒƒ์ด์ง€ ๊ฐ€๊ณตํ•ด์„œ ์“ธ์ˆ˜๋Š” ์žˆ๋‹ค! ๐Ÿ‘†

 

์œ„์™€ ๊ฐ™์ด V(1,0,0)์„ ๋”ํ•ด์ฃผ๋ฉด ์‚ผ๊ฐํ˜•์€ ๋งˆ์น˜ x์ถ•์œผ๋กœ 1์”ฉ ์˜ฎ๊ธด๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ธ๋‹ค.

์˜ˆ์‹œ๋ฅผ ๋“  ๊ฒƒ ๋ฟ์ด์ง€ ๋‹ค๋ฅธ ๋‹ค์–‘ํ•œ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์œ„์˜ ๊ทธ๋ฆผ๋“ค์€ ์ธ์Šคํ„ด์‹ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ์–ด๋–ป๊ฒŒ ์“ธ ์ˆ˜ ์žˆ๋Š”์ง€ ๋‹ค์‹œ ๋‹ค๋ฃจ๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

๋งŒ์•ฝ 3์ฐจ์› ๋ฌผ์ฒด๋ฅผ ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ œ์ž‘ํ•œ๋‹ค๋ฉด,

์ด ๊ณผ์ •์—์„œ 3์ฐจ์› ์ขŒํ‘œ๋“ค์„ 2์ฐจ์› ์ขŒํ‘œ๋กœ ๋ณ€๊ฒฝํ•˜๋Š” ์—ฐ์‚ฐ์ด ์ผ์–ด๋‚œ๋‹ค.

3์ฐจ์› ๊ณต๊ฐ„์•ˆ์—์„œ ๋ฌผ์ฒด๋“ค์€ ๋ชจ๋‘ x,y,z ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ํ˜„์‹ค์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋‹ˆํ„ฐ์™€ ๊ฐ™์€ ํ‰๋ฉด ๋””์Šคํ”Œ๋ ˆ์ด๋ฅผ ํ†ตํ•ด 3์ฐจ์› ์ขŒํ‘œ๋ฅผ ๋ณผ๊ฒŒ๋œ๋‹ค. ์ดํ•ด๊ฐ€ ์–ด๋ ต๋‹ค๋ฉด ์นด๋ฉ”๋ผ๋ฅผ ์ƒ๊ฐํ•ด๋ณด์ž.

์‚ฌ์ง„์„ ์ฐ๋Š” ๋Œ€์ƒ์€ ํ˜„์‹ค ๊ณต๊ฐ„์ธ 3์ฐจ์› ๊ณต๊ฐ„์— ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” 2์ฐจ์› ํ‰๋ฉด์ธ ์‚ฌ์ง„ ์•ˆ์— ํ”ผ์‚ฌ์ฒด๋ฅผ ๋‹ด๊ฒŒ ๋œ๋‹ค.

๋”ฐ๋ผ์„œ 3์ฐจ์› ์ขŒํ‘œ๋ฅผ 2์ฐจ์› ์ขŒํ‘œ๋กœ ๋ณ€๊ฒฝ์„ ํ•˜์—ฌ์„œ ์ •์ ์˜ ์œ„์น˜๋ฅผ ๊ณ„์‚ฐํ•˜๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค.

 

2. ํ…Œ์…€๋ ˆ์ด์…˜

OpenGL์—์„œ ํ…Œ์…€๋ ˆ์ด์…˜ ๊ณผ์ •์€ ๊ณ ์ • ํ•จ์ˆ˜์ด๋ฉฐ

์ผ์ •ํ•œ ํ˜•ํƒœ์˜ ๋„ํ˜•๋“ค๋กœ ํ‰๋ฉด์„ ๋นˆํ‹ˆ ์—†์ด ์ฑ„์šฐ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

ํด๋ฆฌ๊ณค ์•ˆ์„ ํด๋ฆฌ๊ณค์œผ๋กœ ์ฑ„์šฐ๋Š” ๊ฒƒ์ธ๋ฐ ์‹ค์ œ๊ฐ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

ํ•˜์ง€๋งŒ ํด๋ฆฌ๊ณค์˜ ์ˆซ์ž๋ฅผ ๋†’์ด๋Š” ๊ฒƒ์€ ์„ฑ๋Šฅ์˜ ์ €ํ•˜๋ฅผ ์ดˆ๋ž˜ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ์œ ์˜ํ•˜์—ฌ์•ผ ํ•œ๋‹ค.

 

์ •ํ™•ํžˆ ์ด๋ ‡๊ฒŒ ๋œ๋‹ค๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ด๋Ÿฐ๋Š๋‚Œ์ด๋ผ๋Š” ๊ฒƒ

๋‹ค์Œ์€ ํ…Œ์…€๋ ˆ์ด์…˜ ๊ณผ์ •์ด๋‹ค.

์ค„์—ฌ์„œ ํ…Œ์…€๋ ˆ์ด์…˜ ๋‹จ๊ณ„๋กœ๋งŒ ๋งํ•˜๋Š” ๊ทธ๋ž˜ํ”ฝํŒŒ์ดํ”„๋ผ์ธ ์„ค๋ช…๋„ ๋งŽ์€๋ฐ ์ •ํ™•ํ•˜๊ฒŒ๋Š” 3๋‹จ๊ณ„๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ๋‹ค.

์•„๋งˆ ๋งŽ์ด ์“ฐ์ง€ ์•Š์•„์„œ ๊ทธ๋Ÿฐ๊ฒƒ ์•„๋‹๊นŒ ์‹ถ์€๋ฐ ํ…Œ์…€๋ ˆ์ด์…˜์€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•œ ํ‰๋ฉด์„ ์‚ผ๊ฐํ˜•์œผ๋กœ ๊ฝ‰์ฑ„์šฐ๋Š” ๋ฐฉ์‹์ด๋‹ค. 

์ด๋ฅผ ์ด์šฉํ•ด์„œ ํ•˜๋Š” ๊ฒƒ์€ ๋Š˜์–ด๋‚œ ๊ผญ์ง“์ ์˜ ๋†’๋‚ฎ์ด๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‰๋ฉด์„ ์šธํ‰๋ถˆํ‰ํ•˜๊ฒŒ๋” ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋ณ€ํ™˜์„ ํ•˜๋ฉด ๋‹น์—ฐํžˆ ๊ผญ์ง“์ ์˜ ๊ฐฏ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์–‘๋„ ๋งŽ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

๊ทธ๋ž˜์„œ ๋ฒ”ํ”„๋งตํ•‘์ด๋‚˜ ๋…ธ๋ง๋งตํ•‘ ๋“ฑ๋“ฑ ๋ˆˆ์†์ž„์„ ํ•˜๋Š” ๋งตํ•‘๋“ค์„ ๋งŽ์ด ํ–ˆ๊ณ  2010๋…„๋„๊นŒ์ง€ ๋งŽ์ด ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค๊ณ  ํ•œ๋‹ค. ์˜ˆ์ „์— ๋น„ํ•ด์„œ ํ˜„์žฌ๋Š” ์ปดํ“จํ„ฐ์˜ ์‚ฌ์–‘๋“ค์ด ๋งŽ์ด ์ข‹์•„์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ์—๋Š” ์‚ฌ์šฉํ•œ ๊ฒŒ์ž„๋“ค๋„ ๊ฝค ์žˆ๋‹ค.

* ํ…Œ์…€๋ ˆ์ด์…˜ ์ปจํŠธ๋กค ์‰์ด๋”

ํ…Œ์…€๋ ˆ์ด์…˜ ์„ธ ๊ฐ€์ง€ ๋‹จ๊ณ„ ์ค‘ ์ฒซ ๋ฒˆ์งธ ๋‹จ๊ณ„์ด๋‹ค.

์ด ์‰์ด๋”๋Š” ๋ฒ„ํ…์Šค ์‰์ด๋”๋กœ๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋ฐ›์•„ ์ฃผ๋กœ ๋‘ ๊ฐ€์ง€ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

   * ํ…Œ์…€๋ ˆ์ด์…˜ ์—”์ง„์— ๋ณด๋‚ผ ํ…Œ์…€๋ ˆ์ด์…˜์˜ ๋ ˆ๋ฒจ์„ ๊ฒฐ์ •

   * ์ˆ˜ํ–‰๋œ ๋‹ค์Œ์— ์‹คํ–‰๋˜๋Š” ํ…Œ์…€๋ ˆ์ด์…˜ ์ด๋ฒจ๋ฅ˜์—์ด์…˜ ์‰์ด๋”์— ๋ณด๋‚ผ ๋ฐ์ดํ„ฐ๋ฅผ ์ƒ์„ฑ

 

* ํ…Œ์…€๋ ˆ์ด์…˜ ๊ณ ์ • ํ•จ์ˆ˜

ํŒจ์น˜๋กœ ํ‘œํ˜„๋˜๋Š” ๊ณ ์ฐจ ์„œํ”ผ์Šค๋ฅผ ์ , ์„ , ์‚ผ๊ฐํ˜•๊ณผ ๊ฐ™์€ ์ž‘์€ ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ๋กœ ๋ถ„ํ• ํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

ํ…Œ์…€๋ ˆ์ด์…˜ ์ด๋ฒจ๋ฅ˜์—์ด์…˜ ์‰์ด๋”์˜ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋  ์ธ์ž๋ฅผ ์ƒ์„ฑํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

https://ogldev.org/www/tutorial30/tutorial30.html

Primitive Generator๋ผ๊ณ ๋„ ๋ถ€๋ฅด๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์œ„์˜ ๋งํฌ์—์„œ ๋ณด๋ฉด ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์„ค์ •๋“ค์„ ํ†ตํ•ด์„œ

glDrawElements(GL_PATCHES, m_Entries[i].NumIndices, GL_UNSIGNED_INT, 0);

์ด ๋ถ€๋ถ„์—์„œ GL_PATCHES ์ด ๋ถ€๋ถ„์— ํ…Œ์…€๋ ˆ์ด์…˜ ๊ด€๋ จ ๋ ˆ๋ฒจ ๋ฐ ๋ฐ์ดํ„ฐ๋“ค์„ ์ž‘์„ฑํ•ด์„œ ๋„ฃ์–ด์ฃผ๋Š” ํ˜•์‹์ด๋‹ค.

์ด ํ”„๋ฆฌ๋ฏธํ‹ฐ๋ธŒ ๋ถ€๋ถ„์—๋Š” ์„ค์ •์„ ํ•ด์ฃผ์ง€ ์•Š์•„๋„ GL_POINTS, GL_LINES, GL_LINE_STRIP ๋“ฑ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋งŒ๋“ค์–ด์ ธ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ๋‹ค. ์ด ๋ถ€๋ถ„์€ ๋‚˜์ค‘์— ์‚ผ๊ฐํ˜•์„ ๊ทธ๋ฆด ๋•Œ ๋‹ค์‹œ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

* ํ…Œ์…€๋ ˆ์ด์…˜ ์ด๋ฒจ๋ฅ˜์—์ด์…˜ ์‰์ด๋”

ํ…Œ์…€๋ ˆ์ดํ„ฐ์— ์˜ํ•ด ์ƒ์„ฑ๋œ ๊ฐ ๋ฒ„ํ…์Šค์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ ํ˜ธ์ถœ์„ ์ˆ˜ํ–‰๋œ๋‹ค.

๋ ˆ์ด์•„์›ƒ ์ง€์‹œ์–ด๋กœ ํ…Œ์…€๋ ˆ์ด์…˜ ๋ชจ๋“œ๋ฅผ ์„ค์ •ํ•œ๋‹ค.

 

 

--------------------------------------------------------------------------------------------------------------------------------------------

๋ฐ˜์‘ํ˜•
728x90

์•„๋ฌด๋ž˜๋„ ์ด์ „์— ์˜ฌ๋ ธ๋˜ ๊ฒƒ๋“ค์€ ์ˆ˜์—…์‹œ๊ฐ„์— ๊ต์ˆ˜๋‹˜์˜ ๋„์›€์„ ๋ฐ›์•„ ํ–ˆ๋˜ ๊ฒƒ๋“ค์ธ๋ฐ

๊ฝค ์ ์ง€ ์•Š์€ ๋ถ„๋“ค์ด openGL์— ๋Œ€ํ•ด ๊ด€์‹ฌ์ด ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๊ณต๋ถ€๋„ ํ• ๊ฒธ ๋‚ด๊ฐ€ ์ง์ ‘ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ž๋ฃŒ๋“ค์„ ์ฐธ๊ณ ํ•˜์—ฌ์„œ ๋งŒ๋“ค์–ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ผ๋‹จ ๋‚˜๋Š” VisualStudio 2017์„ ์‚ฌ์šฉํ•  ๊ฒƒ์ด๋‹ค.

ํ”„๋กœ์ ํŠธ๋ฅผ ๋งŒ๋“ค๊ณ  main.cpp๋ฅผ ์†Œ์Šค ์ถ”๊ฐ€ํ•ด์ฃผ๊ณ 

ํ”„๋กœ์ ํŠธ(P) โ†’ ์†์„ฑ(P) ์„ ํด๋ฆญํ•˜์—ฌ ํ”„๋กœ์ ํŠธ์˜ ์†์„ฑ์„ ํ‚จ๋‹ค.

 

 

 

1. C/C++ โ†’ ์ผ๋ฐ˜ โ†’ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ

2. ๋ง์ปค โ†’ ์ผ๋ฐ˜ โ†’ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ

3. ๋ง์ปค โ†’ ์ž…๋ ฅ โ†’ ์ถ”๊ฐ€ ์ข…์†์„ฑ

์— GLFW์™€ gl3w๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

GLFW ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://www.glfw.org/

 

GLFW๋Š” ๋ฐ์Šคํฌํƒ‘์—์„œ OpenGL, OpenGL ES ๋ฐ Vulkan ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์˜คํ”ˆ ์†Œ์Šค ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
์ฐฝ, ์ปจํ…์ŠคํŠธ ๋ฐ ํ‘œ๋ฉด ์ƒ์„ฑ, ์ž…๋ ฅ ๋ฐ ์ด๋ฒคํŠธ ์ˆ˜์‹ ์„ ์œ„ํ•œ ๊ฐ„๋‹จํ•œ API๋ฅผ ์ œ๊ณตํ•ด์ค€๋‹ค.
glfwinit(), glfwCreateWindow() ๋“ฑ๊ณผ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

 

gl3w ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ : https://github.com/skaslev/gl3w (cmake ์ด์šฉํ•ด์„œ ๋นŒ๋“œํ•ด์•ผํ• ๋“ฏ)

 

gl3w๋Š” glew๋ฅผ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ glew๋Š” ์˜›๋‚  ๋ฒ„์ „์˜ OpenGL๊นŒ์ง€ ์ง€์›ํ•œ๋‹ค.
gl3w ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” OpenGL 3์™€ 4์˜ ์ฝ”์–ด ํ”„๋กœํŒŒ์ผ์— ์ดˆ์ ์„ ๋งž์ถ”๊ณ  ์žˆ๋‹ค.

 

๋งŒ์•ฝ LNK2001 ์—๋Ÿฌ๊ฐ€ ๋œฌ๋‹ค๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜์˜ ์ดˆ๊ธฐํ™”๊ฐ€ ๋˜์ง€ ์•Š์€ ๊ฒƒ์ด๋‹ˆ gl3w.c ํŒŒ์ผ์„ ํ”„๋กœ์ ํŠธ ์•ˆ์— ์†Œ์Šค๋กœ ์ถ”๊ฐ€ํ•˜์ž. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• ์ฐพ์€ ๋งํฌ

 

 

 

 

main์— ๊ธฐ๋ณธํ˜•์„ ์ ์–ด์ฃผ๊ณ (https://www.khronos.org/opengl/wiki/OpenGL_Loading_Library#GL3W ์„ ์ฐธ๊ณ ํ•จ)

 

๊ทธ๋ฆฌ๊ณ  

#include <GL/gl3w.h> #include <GLFW/glfw3.h>

์ด๋ถ€๋ถ„์€ ๊ผญ ์ˆœ์„œ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ ์ง€ ๋ง๊ณ  ๋˜‘๊ฐ™์ด ์ ์–ด์•ผ ํ•œ๋‹ค.

๊ทธ๋ฆฌ๊ณ  ์ปดํŒŒ์ผํ•ด๋ณด๋ฉด

 

 

 

์ด ์ฐฝ์ด ๋œจ๋ฉด ์ •์ƒ์ด๋‹ค. ์—๋Ÿฌ๊ฐ€ ๋œจ๋ฉด ๋‹ค์‹œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๊ฒฝ๋กœ๊ฐ€ ์ž˜๋ชป๋˜์ง„ ์•Š์•˜๋Š”์ง€,  64๋น„ํŠธ 32๋น„ํŠธ ์ž˜ ํ™•์ธํ–ˆ๋Š”์ง€ ํ•œ๋ฒˆ ๋” ์ฒดํฌํ•ด๋ณด์ž.

ํ•„์ž๋Š” ์˜คํ”ˆ์†Œ์Šค์ธ ImGUI๋ฅผ ์ด์šฉํ•˜์—ฌ์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

์ฐธ๊ณ  ๋งํฌ : https://github.com/ocornut/imgui

๋‹ค์‹œ ํ•œ ๋ฒˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ ํฌํ•จ ๋””๋ ‰ํ„ฐ๋ฆฌ์— ๋„ฃ๋Š”๋‹ค.

ImGUI๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋”ฐ๋กœ ์ž์ฒด์ ์œผ๋กœ ์ œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ฉด ํ†ต์งœ๋กœ ์†Œ์Šค์ฝ”๋“œ๋ฅผ ๋‚ด๋ถ€์— ๋„ฃ์–ด์„œ ๋นŒ๋“œํ•˜๋ฉด ๋œ๋‹ค.

๋‚˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ œ์ž‘ ์•„๋ž˜ ๋งํฌ์˜ ๋ธ”๋กœ๊ทธ๋ฅผ ๋”ฐ๋ผ์„œ ์ œ์ž‘ํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€๋‹ค.

https://swstar.tistory.com/229#gref

 

๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค C/C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋งŒ๋“ค๊ธฐ

์ด๋ฒˆ ํฌ์ŠคํŒ…์—์„œ๋Š” ๋งˆ์ดํฌ๋กœ์†Œํ”„ํŠธ ๋น„์ฃผ์–ผ ์ŠคํŠœ๋””์˜ค์—์„œ C์–ธ์–ด ๋˜๋Š” C++ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ œ์ž‘ํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ด…์‹œ๋‹ค. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ •์  (static) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ ๋™์  (dynamic) ๋ผ์ด๋ธŒ๋Ÿฌ

swstar.tistory.com

 

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์„ค์ •์ด ๋๋‚˜๋ฉด

https://github.com/ocornut/imgui/blob/master/examples/opengl3_example/main.cpp

์ด ์ชฝ์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด imgui์™€ glfw3,gl3w์— ๊ด€ํ•œ ์˜ˆ์ œ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ๋‹ค.

์ด๊ฒƒ์„ ์กฐ๊ธˆ ์ฐธ๊ณ ํ•˜์—ฌ์„œ ๋„ฃ์–ด๋ณด์ž.

 

--------------------------------------------------------------------------------------------------------------

์ตœ๊ทผ์— ๋‹ค์‹œ ๋“ค์–ด๊ฐ€๋ณด๋‹ˆ ๋ช‡๊ฐ€์ง€ URL๋„ ์‚ฌ๋ผ์ง€๊ณ  ํ•ด์„œ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์„ ์“ฐ๊ธธ ๋ฐ”๋ž€๋‹ค.

์•„๋ฌด๋ž˜๋„ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž์ฃผ ํ•˜์‹œ๋‹ค ๋ณด๋‹ˆ ๋ฐฉ๋ฒ•์„ ๋ฐ”๊พผ๋“ฏ ํ•œ๋ฐ

๊ฐ„๋‹จํ•˜๊ฒŒ https://github.com/ocornut/imgui ์—ฌ๊ธฐ์„œ ์ดˆ๋ก์ƒ‰ Code ๋ฒ„ํŠผ -> download Zip -> ์••์ถ•ํ•ด์ œ ํ›„ imgui ๊ด€๋ จ ์†Œ์Šค๋“ค์„ ํ”„๋กœ์ ํŠธ์— ํฌํ•จ์‹œ์ผœ์„œ ์ง„ํ–‰ํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๋‚˜๋Š” ์œ„ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ImGUI ์†Œ์Šค๋“ค์„ ์ถ”๊ฐ€ํ•˜์˜€๊ณ  ์†์„ฑ๋“ค์„ ๋‹ค์‹œ ์žฌ์„ค์ •ํ•˜์˜€๋‹ค.

glfw ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์†์„ฑ์— ์ถ”๊ฐ€ํ•˜์—ฌ์ฃผ์—ˆ๊ณ 

glviewport, glclearcolor, glclear ํ•จ์ˆ˜๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†๋Š” LNK2019 ์—๋Ÿฌ๊ฐ€ ๋œจ๋Š” ๊ฒฝ์šฐ์—๋Š”

์œ„์˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ถ”๊ฐ€ ์ข…์†์„ฑ์— glfw3.lib์™€ opengl32.lib๋ฅผ ๋„ฃ์–ด๋ณด๊ธธ ๋ฐ”๋ž€๋‹ค.

 

opengl3_loader.h์˜ ๊ฒฝ์šฐ ํ˜„์žฌ gl3w.h์˜ ์ตœ์†Œํ•œ์˜ ๊ธฐ๋Šฅ๋“ค์„ ๋•ก๊ฒจ์„œ ์˜ค๋ฏ€๋กœ ๋‚˜์ค‘์— gl3w.lib๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋•ก๊ฒจ์˜ค๋Š” ๊ฒฝ์šฐ ์žฌ์ •์˜ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

https://github.com/ocornut/imgui/issues/4445

 

OpenGL backend now embeds its own GL loader (imgui_impl_opengl3_loader.h) ยท Issue #4445 ยท ocornut/imgui

TL;DR; Our GL backend now embed its own minimal GL loader (embedded file; full source repo) User/application don't need to configure anything related to GL loader. User/application can use their ow...

github.com

์œ„์˜ ๋งํฌ๋Š” ํ•ด๋‹น ์—๋Ÿฌ์— ๋Œ€ํ•œ imgui ์ œ์ž‘์ž๊ฐ€ ๋‹ต๋ณ€ํ•œ ๊ฒฝ์šฐ์ด๋ฉฐ gl3w_stripped๋ผ๋Š” ํŒŒ์ผ์„ ์ œ์ž‘ํ•˜์—ฌ ๋‘ ๊ฐœ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถฉ๋Œ์‹œํ‚ค์ง€ ์•Š๊ฒŒ๋” ๋งŒ๋“ค๋ผ๋Š” ๊ฒƒ์ธ๋ฐ

https://github.com/dearimgui/gl3w_stripped

 

GitHub - dearimgui/gl3w_stripped: Simple OpenGL core profile loading, customized for Dear ImGui

Simple OpenGL core profile loading, customized for Dear ImGui - GitHub - dearimgui/gl3w_stripped: Simple OpenGL core profile loading, customized for Dear ImGui

github.com

๋‚˜์˜ ๊ฒฝ์šฐ cmake๋ฅผ ํ†ตํ•ด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์„œ ๋Œ๋ฆฌ๋‹ˆ๊นŒ imgui_loader.h์— ํ•„์š”ํ•œ gl3w ํŒŒ์ผ๋“ค์ด ์ œ์ž‘๋˜์–ด์„œ gl3w.h ํ—ค๋”ํŒŒ์ผ ๋Œ€์‹  imgui_impl_opengl3_loader.h ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๋‹ˆ๊นŒ ํ•ด๊ฒฐ๋˜์—ˆ๋‹ค.

 

https://github.com/ocornut/imgui/blob/master/examples/example_glfw_opengl3/main.cpp

์ด ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ์„œ main ํ•จ์ˆ˜๋ฅผ ์ œ์ž‘ํ•˜์˜€๋‹ค.

 

๋ณธ ํ™”๋ฉด์ด ๋–ณ๋‹ค๋ฉด ์„ฑ๊ณตํ•œ ๊ฒƒ์ด๋‹ค. ์•ž์œผ๋กœ ์ด ImGUI์™€ ํ•จ๊ป˜ openGL์„ ๊ณต๋ถ€ํ•ด๋ณด๋„๋ก ํ•˜์ž!

 

์ด์— ๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ ํ• ๋งŒํ•œ ์‚ฌ์ดํŠธ์˜ ๋งํฌ๋“ค์„ ์ข€ ๋‚จ๊ฒจ๋†“๊ฒ ์Šต๋‹ˆ๋‹ค

์ €๋„ ์ œ ์ผ์ด ์ •๋ฆฌ๊ฐ€ ๋˜๋ฉด ์•„๋งˆ ํฌ์ŠคํŒ…์„ ๋‹ค์‹œ ์‹œ์ž‘ํ•˜๊ฒŒ ๋  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค~!

 

LearnOpenGL

learnopengl.com/

 

Learn OpenGL, extensive tutorial resource for learning Modern OpenGL

Welcome to OpenGL Welcome to the online book for learning OpenGL! Whether you are trying to learn OpenGL for academic purposes, to pursue a career or simply looking for a hobby, this book will teach you the basics, the intermediate, and all the advanced kn

learnopengl.com

LearnOpenGL ๋ฒˆ์—ญ ๋ธ”๋กœ๊ทธ

heinleinsgame.tistory.com/4

 

[Learn OpenGL ๋ฒˆ์—ญ] 2-1. ์‹œ์ž‘ํ•˜๊ธฐ - OpenGL

OpenGL ์‹œ์ž‘ํ•˜๊ธฐ/OpenGL ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ๋จผ์ € OpenGL์ด๋ž€ ๋ฌด์—‡์ธ์ง€ ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. OpenGL์€ ๊ทธ๋ž˜ํ”ฝ ๋ฐ ์ด๋ฏธ์ง€๋ฅผ ์กฐ์ž‘ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋งŽ์€ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•˜๋Š” API( Application Programming Interface )๋ผ..

heinleinsgame.tistory.com

 

 

 

 

P.S ํ˜น์—ฌ๋‚˜ ๋ฌธ์ œ๊ฐ€ ๋˜๊ฑฐ๋‚˜ ํ‹€๋ฆฐ ์‚ฌํ•ญ์€ ๊ฐ€๋ฅด์ณ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :)

 

 

 

 

๋ฐ˜์‘ํ˜•

+ Recent posts