๊ด€๋ฆฌ ๋ฉ”๋‰ด

๐ŸŒฅํ˜ธ์•„์ž„์˜ GamLog

[OpenGL] OpenGL ES๋ฅผ ์ด์šฉํ•œ 3์ฐจ์› ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์ž…๋ฌธ _ 3์žฅ ๋ณธ๋ฌธ

Unity/OpenGL

[OpenGL] OpenGL ES๋ฅผ ์ด์šฉํ•œ 3์ฐจ์› ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์ž…๋ฌธ _ 3์žฅ

์˜ฅ์ฒœ์ง€ํ–ฅ์‚ฌ 2023. 11. 14. 12:59
728x90



์ง€๋‚œ ์‹œ๊ฐ„์— ์ด์–ด OpenGL ES๋ฅผ ์ด์šฉํ•œ 3์ฐจ์› ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์ž…๋ฌธ ๋„์„œ๋ฅผ ํ†ตํ•ด
ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ์„ฑ๋˜๊ณ  ์ €์žฅ, ์ „๋‹ฌ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๋ ค๊ณ  ํ•œ๋‹ค.

์ฐธ๊ณ ํ•œ ๋„์„œ๋Š” ์•„๋ž˜์— ์žˆ๋‹ค.

[ OpenGL ES๋ฅผ ์ด์šฉํ•œ 3์ฐจ์› ์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค ์ž…๋ฌธ ]


๋ชฉ์ฐจ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


๐Ÿ‘พ๋ชฉ์ฐจ


1. ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ
2. ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ์˜ ํ‘œํ˜„
3. ํ‘œ๋ฉด ๋…ธ๋ฉ€
3_1. ์‚ผ๊ฐํ˜• ๋…ธ๋ฉ€
3_2. ์ •์  ๋…ธ๋ฉ€
4. ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ ๋‚ด๋ณด๋‚ด๊ธฐ์™€ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ





โ—๏ธํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ

 


์™œ ์ •์ ์ด ์•„๋‹Œ ํด๋ฆฌ๊ณค๋ฉ”์‰ฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€?
ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ๋Š” ์ •ํ™•ํ•œ ํ‘œํ˜„๋ฒ•์ด ์•„๋‹ˆ๋ผ ๋ถ€๋“œ๋Ÿฌ์šด ๊ณก๋ฉด์„ ๊ทผ์‚ฌ์ ์œผ๋กœ ํ‘œํ˜„ํ•œ ๊ทผ์‚ฌ์  ํ‘œํ˜„๋ฒ•์œผ๋กœ
GPU๋Š” ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ ์ฒ˜๋ฆฌ์— ์ตœ์ ํ™” ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„ ๋ Œ๋”๋ง ์ฝ˜ํ…์ธ (๊ฒŒ์ž„)์—์„œ๋Š” ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ๊ฐ€ ์„ ํ˜ธ๋œ๋‹ค.

ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ์˜ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” ํด๋ฆฌ๊ณค์€ ์‚ผ๊ฐํ˜•์ด๋‹ค. ํ•˜์ง€๋งŒ ๋ชจ๋ธ๋ง ์ž‘์—…์—์„œ๋Š” ์‚ฌ๊ฐํ˜• ๋ฉ”์‰ฌ๊ฐ€ ์„ ํ˜ธ๋œ๋‹ค.
์‚ฌ๊ฐํ˜• ๋ฉ”์‰ฌ ํ•˜๋‚˜๋ฅผ ๋‘๊ฐœ์˜ ์‚ผ๊ฐํ˜• ๋ฉ”์‰ฌ๋กœ ๋ถ„ํ• ํ•˜์—ฌ ์‚ผ๊ฐํ˜• ๋ฉ”์‰ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

์ผ๋ฐ˜์ ์œผ๋กœ ์˜ค์ผ๋Ÿฌ ๊ณต์‹์— ๋”ฐ๋ฅด๋ฉด ๋‹ซํžŒ ๋ฉ”์‰ฌ์—์„œ ์‚ผ๊ฐํ˜• ๋ฉ”์‰ฌ์˜ ๊ฐœ์ˆ˜๋Š” ์ •์  ๊ฐœ์ˆ˜์˜ 2๋ฐฐ์ด๋‹ค.
์ •์  ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์œผ๋ฉด ๋ฉ”์‰ฌ์˜ ํ•ด์ƒ๋„๊ฐ€ ๋†’๋‹ค๊ณ  ๋งํ•˜๋ฉฐ ํ•ด์ƒ๋„๋Š” ์ •ํ™•์„ฑ๊ณผ ํšจ์œจ์„ฑ ์‚ฌ์ด์˜ ์ƒ๋ฐ˜๊ด€๊ณ„๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๊ฒฐ์ •๋œ๋‹ค.
ํ•ด์ƒ๋„๊ฐ€ ๋†’์„ ์ˆ˜๋ก ๋ฉ”์‰ฌ๋Š” ๋ณธ๋ž˜์˜ ๊ณก๋ฉด๊ณผ ์œ ์‚ฌํ•ด์ง€์ง€๋งŒ ๋ฉ”์‰ฌ ์ฒ˜๋ฆฌ์‹œ๊ฐ„์ด ์ฆ๊ฐ€ํ•ด ํšจ์œจ์„ฑ์ด ๋–จ์–ด์ง„๋‹ค.




โ—๏ธํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•


์‚ผ๊ฐํ˜• ๋ฉ”์‰ฌ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœํ•จ ๋ฐฉ๋ฒ•์€ ์„ธ ์ •์ ์„ ์ˆœ์„œ๋กœ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
์ •์ ๋“ค์ด ์ €์žฅ๋˜๋Š” ๊ณต๊ฐ„์ธ ์ •์  ๋ฐฐ์—ด์—์„œ ํ•œ๋ฒˆ์— ์„ธ ์ •์ ์„ ์ฝ์–ด ์‚ผ๊ฐํ˜• ๋ฉ”์‰ฌ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.


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


์œ„ ์˜ˆ์‹œ์˜ ๊ฒฝ์šฐ ๋„ํ˜•์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ๊ณ  ๋„ํ˜•์ด ๊ฐ–๋Š” ๋ฒ„ํ…์Šค๊ฐ€ ์ ๊ธฐ๋•Œ๋ฌธ์— ์ฐจ์ด๊ฐ€ ์—†์–ด๋ณด์ด์ง€๋งŒ ํ•˜์ดํด๋ฆฌ๋ฅผ ๊ฐ–๋Š” ๋ชจ๋ธ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒฝ์šฐ์—๋Š”
๋ฐ์ดํ„ฐ ํฌ๊ธฐ์˜ ์ฐจ์ด๊ฐ€ ๋น„๊ตํ•  ์ˆ˜ ์—†์ด ์ฐจ์ด๋‚œ๋‹ค. ๊ทธ ๋•Œ๋Š” ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ ํšจ์œจ์ ์ผ ๊ฒƒ์ด๋‹ค.

Open GL์—์„œ๋Š” ์ •์ ๋ฐฐ์—ด๋งŒ์„ ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„๊ณผ ์ธ๋ฑ์Šค ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ํฌํ•จํ•œ ํ‘œํ˜„ ๋ชจ๋‘๋ฅผ ์ง€์›ํ•˜๊ณ ์žˆ๋‹ค.
ํ•˜์ง€๋งŒ ์ „์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๋Š” ๊ฑฐ์˜ ์—†๋‹ค๊ณ  ๋ด๋„ ๋ฌด๋ฐฉํ•˜๋‹ค.


 

โ—๏ธํ‘œ๋ฉด ๋…ธ๋ง



- ์‚ผ๊ฐํ˜• ๋…ธ๋ง

: ์‚ผ๊ฐํ˜• ํ‘œ๋ฉด์— ์ˆ˜์ง์ธ ๋ฒ•์„ ๋ฒกํ„ฐ๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
<p1, p2, p3>๋กœ ์ด๋ฃจ์–ด์ง„ ์‚ผ๊ฐํ˜•๋ฉ”์‰ฌ๋กœ ๊ฐ€์ •ํ•  ๋•Œ, ์ p1์™€ p2๋ฅผ ์ž‡๋Š” ๋ฒกํ„ฐ v1๊ณผ  p1์™€ p3๋ฅผ ์ž‡๋Š” ๋ฒกํ„ฐ v2์˜ ๋ฒกํ„ฐ๊ณฑ์ด ์‚ผ๊ฐํ˜• ๋…ธ๋ง๋กœ ์ •์˜ ๋  ์ˆ˜ ์žˆ๋‹ค.

์ปดํ“จํ„ฐ ๊ทธ๋ž˜ํ”ฝ์Šค์—์„œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ชจ๋“  ๋…ธ๋ง์„ ๋‹จ์œ„๋ฒกํ„ฐ๋กœ ํ‘œํ˜„ํ•œ๋‹ค.
๋”ฐ๋ผ์„œ v1 x v2๋ฅผ ์ž์‹ ์˜ ๊ธธ์ด๋กœ ๋‚˜๋ˆ„๋Š” ์ •๊ทœํ™” ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ–ˆ๋‹ค.

์•„๋ž˜๋Š” ์ •๊ทœํ™”์‹์„ ์ •๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.

n12์™€ n21์€ ์•ž์„œ ๋งํ•œ๋ฐ”์™€ ๊ฐ™์ด ๋ฐ˜๋Œ€๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค.
์ฆ‰, ์‚ผ๊ฐํ˜•๋…ธ๋ง์˜ ๋ฐฉํ–ฅ์€ ์ •์  ์ˆœ์„œ๊ฐ€ p1,p2,p3 ์ธ์ง€ p1,p3,p2์ธ์ง€์— ๋”ฐ๋ผ ๋‹ฌ๋ผ์ง„๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.


์œ„ ์‚ผ๊ฐํ˜•์„ ์˜ค๋ฅธ์† ๋ฒ•์น™์— ๋”ฐ๋ฅด๋ฉด, ๋ฐ˜์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ ์ •์ ์ด ์ •๋ ฌ๋˜๊ณ  ๋ฌผ์ฒด ํ‘œ๋ฉด์—์„œ ๋ฐ”๊นฅ์ชฝ์„ ํ–ฅํ•˜๋Š” ๋…ธ๋ฉ€์„ ์ƒ์„ฑํ•œ๋‹ค. < p1,p2,p3 >
๋ฐ˜๋Œ€์˜ ๊ฒฝ์šฐ, ์‹œ๊ณ„๋ฐฉํ–ฅ์œผ๋กœ ์ •๋ ฌ๋œ ์ ์ ์€ ๋ฌผ์ฒด ์•ˆ์ชฝ์„ ํ–ฅํ•˜๋Š” ๋…ธ๋ฉ€์„ ์ƒ์„ฑํ•œ๋‹ค. < p1,p3,p2 >







- ์ •์ ๋…ธ๋ง


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

๊ทธ์ค‘ ํ•œ๊ฐ€์ง€ ๋ฐฉ๋ฒ•์€ ํ•œ ์ •์ ์„ ๊ณต์œ ํ•˜๋Š” ์‚ผ๊ฐํ˜• ๋…ธ๋ฉ€๋“ค์˜ ํ‰๊ท ์„ ์ทจํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
๋ณดํ†ต ์ •์ ๋…ธ๋ง์€ 3Ds Max๋“ฑ๊ณผ ๊ฐ™์€ ํŒจํ‚ค์ง€๊ฐ€ ์ž๋™์œผ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค.








โ—๏ธํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ ๋‚ด๋ณด๋‚ด๊ธฐ/๋ถˆ๋Ÿฌ์˜ค๊ธฐ


: ๋ณดํ†ต ํด๋ฆฌ๊ณค ๋ฉ”์‰ฌ๋Š” ๊ทธ๋ž˜ํ”ฝ์Šค ํŒจํ‚ค์ง€(3Ds Max)๋ฅผ ์‚ฌ์šฉํ•ด ์˜คํ”„๋ผ์ธ์—์„œ ๋งŒ๋“ค์–ด์ง€๊ณ  —->   ๋Ÿฐํƒ€์ธ ์‘์šฉํ”„๋กœ๊ทธ๋žจ(unity)๋กœ ๋„˜๊ฒจ์ง„๋‹ค.
์ด๋•Œ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ ํ•ฉํ•œ ํ˜•ํƒœ๋กœ ์ถœ๋ ฅํ•˜๋Š” ํ–‰์œ„๋ฅผ Export(๋‚ด๋ณด๋‚ด๊ธฐ) ๋ผ๊ณ  ํ•˜๊ณ 
์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ์–ด์˜ค๋Š” ๊ณผ์ •์„ Import(๋ถˆ๋Ÿฌ์˜ค๊ธฐ)๋ผ๊ณ ํ•œ๋‹ค.


๋Œ€ํ‘œ์ ์ธ ๊ทธ๋ž˜ํ”ฝ์Šค ํŒจํ‚ค์ง€ 3Ds Max๊ฐ€ ์ง€์›ํ•˜๋Š” ๋Œ€ํ‘œ์ ์ธ ํŒŒ์ผ ํฌ๋งท์ค‘ ํ•˜๋‚˜๋Š” [ .obj ]ํ™•์žฅ์ž์ด๋‹ค.
์ด๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์ •์ ์œ„์น˜, ๋…ธ๋ฉ€, ์‚ผ๊ฐํ˜• ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค.
์ด๋Š” ๊ฐ v(vertex), vn(vertex normal),f(face)๊ธฐํ˜ธ๋กœ ๋‚˜ํƒ€๋‚˜๋ฉฐ 3์ฐจ์› ์˜ค๋ธŒ์ ํŠธ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๋Š”๋ฐ ๊ฐ€์ด๋“œ๊ฐ€ ๋œ๋‹ค.

v, vn์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ค„์€ ๊ฐ ์ •์  ์œ„์น˜์™€ ๋…ธ๋ฉ€์˜ 3์ฐจ์› ์ขŒํ‘œ๋ฅผ ๊ธฐ๋กํ•˜๊ณ 
f๋Š” ์˜ค๋ธŒ์ ํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๋Š” ์‚ผ๊ฐํ˜•์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งํ•œ๋‹ค. ํ•œ ์‚ผ๊ฐํ˜•์€ ์„ธ๊ฐœ์˜ ์ •์  ์œ„์น˜์™€ ๋…ธ๋ฉ€์˜ ์ •๋ณด๋ฅผ ์Œ์œผ๋กœ ๊ธฐ๋กํ•˜๋Š”๋ฐ ์ด ๋‘˜์€ //๋กœ ๊ตฌ๋ถ„๋œ๋‹ค.
1//1 ์€ ์œ„์น˜(0, 1, 0), ๋…ธ๋ฉ€(0, 1, 0)์ธ ์ •์ ์„ ๋งํ•œ๋‹ค.

์ด์™€ ๊ฐ™์ด .obj๋ฅผ ํ†ตํ•ด ์‘์šฉํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์œผ๋กœ ์ด๋™๋œ ๋ฐ์ดํ„ฐ๋Š” ์œ„์™€ ๊ฐ™์€ ๊ธฐํ˜ธ๋ฅผ ํ†ตํ•ด ์ •์ ๋ฐฐ์—ด๊ณผ ์ธ๋ฑ์Šค๋ฐฐ์—ด์„ ๋ณด์—ฌ์ค€๋‹ค.







์˜ค๋Š˜์€ ์•„ํ‹ฐ์ŠคํŠธ๊ฐ€ ๋ชจ๋ธ๋งํ•œ ์˜ค๋ธŒ์ ํŠธ๊ฐ€ ๊ฒŒ์ž„์—”์ง„์œผ๋กœ ๋„˜์–ด์˜ค๊ธฐ๊นŒ์ง€ ์–ด๋–ค ๊ณผ์ •์„ ๊ฑฐ์น˜๊ณ  ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์—ˆ๋Š”์ง€ ๋“ฑ์„ ์•Œ์•„๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ๋‹ค.
๋‹ค์Œ์‹œ๊ฐ„์—” ์ขŒํ‘œ๊ณ„์™€ ํ–‰๋ ฌ์— ๋Œ€ํ•ด ์ง„๋“ํ•˜๊ฒŒ ์•Œ์•„๋ณด์ž


728x90