์๋ณธ - https://learnopengl.com/Getting-started/OpenGL
์ฌ์ ์ ์์ํ๊ธฐ ์ ์ ๋จผ์ OpenGL์ด ์ค์ ๋ก ๋ฌด์์ธ์ง ์ ์ํด์ผ ํฉ๋๋ค.
OpenGL์ ์ฃผ๋ก ๊ทธ๋ํฝ๊ณผ ์ด๋ฏธ์ง๋ฅผ ์กฐ์ํ๋๋ฐ ์ฌ์ฉํ ์ ์๋ ๋ง์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ API(Application Programming Interface)๋ก์จ ํ๋ณด๋ก ๊ฑฐ๋ก ๋ฉ๋๋ค.
๊ทธ๋ฌ๋ OpenGL ์์ฒด๋ API๊ฐ ์๋๋ผ ํฌ๋ก๋ ธ์ค ๊ทธ๋ฃน์ด ๊ฐ๋ฐํ๊ณ ์ ์ง ๊ด๋ฆฌํ๋ ์ฌ์์ ๋ถ๊ณผํฉ๋๋ค.
OpenGL ์ฌ์์ ๊ฐ ๊ธฐ๋ฅ์ ๊ฒฐ๊ณผ/์ถ๋ ฅ๊ณผ ์ํ ๋ฐฉ๋ฒ์ ์ ํํ๊ฒ ๋ช ์ํฉ๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ด ๊ธฐ๋ฅ์ด ์ด๋ป๊ฒ ์๋ํด์ผ ํ๋์ง์ ๋ํ ํด๊ฒฐ์ฑ ์ ๋ง๋ จํ๋ ๊ฒ์ ์ด ์ฌ์์ ๊ตฌํํ๋ ๊ฐ๋ฐ์์๊ฒ ๋ฌ๋ ค์์ต๋๋ค.
OpenGL ์ฌ์์๋ ๊ตฌํ ์ธ๋ถ ์ ๋ณด์ด ๋์ ์์ง ์์ผ๋ฏ๋ก, ์ค์ ๊ฐ๋ฐ๋ OpenGL ๋ฒ์ ์ ๊ฒฐ๊ณผ๊ฐ ์ฌ์๊ณผ ์ผ์นํ๋ ํ(๋ฐ๋ผ์ ์ฌ์ฉ์์๊ฒ ๋์ผํ) ๋ค๋ฅธ ๊ตฌํ์ ํ์ฉํฉ๋๋ค.
์ค์ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์ ๋๊ฐ ๊ทธ๋ํฝ ์นด๋ ์ ์กฐ์ ์ฒด์ ๋๋ค.
๊ตฌ์ ํ ๊ฐ ๊ทธ๋ํฝ ์นด๋๋ ํด๋น ์นด๋์ฉ ํน๋ณํ ๊ฐ๋ฐ๋ OpenGL ๋ฒ์ ์ธ ํน์ OpenGL ๋ฒ์ ์ ์ง์ํฉ๋๋ค.
Apple ์์คํ ์ ์ฌ์ฉํ ๋ OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Apple์ด ์ง์ ๊ด๋ฆฌํ๋ฉฐ Linux ์๋์๋ ๊ทธ๋ํฝ ๊ณต๊ธ์ ์ฒด์ ๋ฒ์ ๊ณผ ์ด๋ฌํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํ ์ ํธ๊ฐ์ ์ ์์ด ๊ฒฐํฉ๋์ด ์์ต๋๋ค.
์ด๋ OpenGL์ด ํ์ง ๋ง์์ผ ํ ์ด์ํ ๋์์ ๋ณด์ผ ๋๋ง๋ค ๊ทธ๋ํฝ ์นด๋ ์ ์กฐ์ ์ฒด(๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ฐ๋ฐ/์ ์ง ๊ด๋ฆฌํ ์ฌ๋)์ ์๋ชป์ผ ๊ฐ๋ฅ์ฑ์ด ๋๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค.
1
|
๋๋ถ๋ถ์ ๊ตฌํ์ ๊ทธ๋ํฝ ์นด๋ ์ ์กฐ์
์ฒด์ ์ํด ๊ตฌ์ถ๋๋ฏ๋ก ๊ตฌํ์ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ ๋๋ง๋ค ์ผ๋ฐ์ ์ผ๋ก
๋น๋์ค ์นด๋ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๋ฐ์ดํธํ๋ฉด ํด๊ฒฐ๋ฉ๋๋ค. ์ด๋ฐ ๋๋ผ์ด๋ฒ์๋ ์นด๋์์ ์ง์ํ๋ ์ต์ ๋ฒ์ ์ OpenGL์ด ํฌํจ๋ฉ๋๋ค. ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด ํญ์ ๊ถ์ฅ๋๋ ์ด์ ์ค ํ๋์ ๋๋ค. |
cs |
Khronos๋ ๋ชจ๋ OpenGL ๋ฒ์ ์ ๋ํ ๋ชจ๋ ์ฌ์ ๋ฌธ์๋ฅผ ๊ณต๊ฐ์ ์ผ๋ก ํธ์คํ ํฉ๋๋ค.
๊ด์ฌ ์๋ ๋ ์๋ ์ฌ๊ธฐ์์ ๋ฒ์ 3.3์ OpenGL ์ฌ์(์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋ฒ์ )์ ์ฐพ์ ์ ์์ต๋๋ค.
์ด ์ฌ์์ OpenGL์ ์ธ๋ถ ์ฌํญ์ ์์ธํ ์ดํด๋ณด๊ณ ์ถ๋ค๋ฉด ์ข์ ์ฝ์๊ฑฐ๋ฆฌ์ ๋๋ค(๊ตฌํ์ด ์๋ ๊ฒฐ๊ณผ๋ง ์ค๋ช ํฉ๋๋ค).
๋ํ ์ฌ์์ ๊ธฐ๋ฅ์ ์ ํํ ์๋์ ์ฐพ๋๋ฐ ์ ์ฉํ ์ฐธ๊ณ ์๋ฃ๋ฅผ ์ ๊ณตํฉ๋๋ค.
์ฝ์ด ํ๋กํ์ผ vs ์ฆ์ ๋ชจ๋(๊ณ ์ ํจ์ ํ์ดํ๋ผ์ธ)
์๋ ์๋ OpenGL์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ทธ๋ํฝ์ ๊ทธ๋ฆฌ๊ธฐ ์ํ ์ฌ์ฉํ๊ธฐ ์ฌ์ด ๋ฐฉ๋ฒ์ธ ์ฆ์ ๋ชจ๋(๊ณ ์ ํจ์ ํ์ดํ๋ผ์ธ์ด๋ผ๊ณ ๋ ํจ)๋ก ๊ฐ๋ฐํ๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค.
OpenGL์ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์จ๊ฒจ์ ธ ์์๊ณ ๊ฐ๋ฐ์๋ค์ OpenGL์ด ๊ณ์ฐ์ ์ํํ๋ ๋ฐฉ์์ ํฌ๊ฒ ํต์ ํ์ง ๋ชปํ์ต๋๋ค.
๊ฐ๋ฐ์๋ค์ ๊ฒฐ๊ตญ ๋ ๋ง์ ์ ์ฐ์ฑ์ ์ํ๊ณ , ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ์ฌ์์ด ๋ ์ ์ฐํด์ก๊ณ , ๊ฐ๋ฐ์๋ค์ ๊ทธ๋ค์ ๊ทธ๋ํฝ์ ๋ ๋ง์ด ํต์ ํ๊ฒ ๋์์ต๋๋ค.
๊ณ ์ ํจ์ ํ์ดํ๋ผ์ธ์ ์ฌ์ฉํ๋ ๊ฒ์ ์ ๋ง ์ฌ์ฉํ๊ธฐ ์ฝ๊ณ ์ดํดํ๊ธฐ ์ฝ์ง๋ง, ๋ํ ๋งค์ฐ ๋นํจ์จ์ ์ ๋๋ค.
์ด๋ฌํ ์ด์ ๋ก ์ด ์ฌ์์ ๋ฒ์ 3.2 ์ดํ ์ฆ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ๋ ์ด์ ์ฌ์ฉํ์ง ์๊ธฐ ์์ํ์ผ๋ฉฐ ๊ฐ๋ฐ์๋ค์ด OpenGL์ ์ฝ์ด ํ๋กํ์ผ ๋ชจ๋๋ก ๊ฐ๋ฐํ๋๋ก ๋๊ธฐ๋ฅผ ๋ถ์ฌํ๊ธฐ ์์ํ์ต๋๋ค.
์ด ๋ชจ๋๋ ์ค๋๋ ๋ชจ๋ ์ฌ์ฉ๋์ง ์๋ ๊ธฐ๋ฅ์ ์ ๊ฑฐํ OpenGL์ ์ฌ์์ ํ๋ถ๋ถ์ ๋๋ค.
OpenGL์ ํต์ฌ ํ๋กํ์ผ์ ์ฌ์ฉํ ๋ OpenGL์ ํ๋์ ๊ดํ์ ์ฌ์ฉํ๋๋ก ๊ฐ์ํฉ๋๋ค.
OpenGL์์ ์ฌ์ฉ๋์ง ์๋ ํจ์ ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ ๋๋ง๋ค OpenGL์์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ณ ๊ทธ๋ฆฌ๊ธฐ๊ฐ ์ค์ง๋ฉ๋๋ค.
ํ๋์ ์ธ ์ ๊ทผ๋ฒ์ ๋ฐฐ์ฐ๋ ๊ฒ์ ์ฅ์ ์ ๊ทธ๊ฒ์ด ๋งค์ฐ ์ ์ฐํ๊ณ ํจ์จ์ ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง, ๊ทธ๊ฒ์ ๋ํ ๋ฐฐ์ฐ๊ธฐ๊ฐ ๋ ์ด๋ ต์ต๋๋ค. ๊ณ ์ ํจ์ ํ์ดํ๋ผ์ธ์ OpenGL์ด ์ํํ ์ค์ ์์ ์์ ์๋นํ ๋ง์ ๋ถ๋ถ์ ์ถ์ํํ์ผ๋ฉฐ ํ์ตํ๊ธฐ๋ ์ฌ์ ์ง๋ง ์ค์ ๋ก OpenGL์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์ ํ๊ธฐ๋ ์ด๋ ค์ ์ต๋๋ค.
ํ๋์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ๊ฐ๋ฐ์๊ฐ OpenGL๊ณผ ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ ์ผ๋ก ์ดํดํด์ผ ํ๋ฉฐ, ๋ค์ ์ด๋ ต๊ธด ํ์ง๋ง ํจ์ฌ ๋ ๋ง์ ์ ์ฐ์ฑ๊ณผ ํจ์จ์ฑ, ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ์ค์ํ ๊ฒ์ ๊ทธ๋ํฝ ํ๋ก๊ทธ๋๋ฐ์ ๋ํ ํจ์ฌ ๋ ๋์ ์ดํด๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
์ด๊ฒ์ ๋ํ ์ด ์ฑ ์ด ํต์ฌ ํ๋กํ OpenGL ๋ฒ์ 3.3์ ๋ง์ถฐ์ง ์ด์ ์ ๋๋ค. ๋น๋ก ๊ทธ๊ฒ์ด ๋ ์ด๋ ต์ง๋ง, ๊ทธ๊ฒ์ ๋ ธ๋ ฅํ ๊ฐ์น๊ฐ ์์ต๋๋ค.
ํ์ฌ OpenGL 4.6์ ์์ฑํ๋ ์์ ์์ ์์ ๋ฒ์ ์ OpenGL์ ์ ํํ ์ ์์ต๋๋ค.
OpenGL 4.6์ด ์ถ์๋ ์ํ์์ OpenGL 3.3์ ์ ๊ฐ ์ ํํ ์ด์ ๋ ๋ฌด์์ผ๊น์?
๊ทธ ์ง๋ฌธ์ ๋ํ ๋๋ต์ ๋น๊ต์ ๊ฐ๋จํฉ๋๋ค. 3.3 ์ดํ ๋ฒ์ ์ ๋ชจ๋ OpenGL์ OpenGL์ ํต์ฌ ๋ฉ์ปค๋์ฆ์ ๋ณ๊ฒฝํ์ง ์๊ณ OpenGL์ ์ ์ฉํ ๊ธฐ๋ฅ์ ์ถ๊ฐํฉ๋๋ค.
์๋ก์ด ๋ฒ์ ์ ๋์ผํ ์์ ์ ์ํํ๋ ๋ฐ ์ฝ๊ฐ ๋ ํจ์จ์ ์ด๊ฑฐ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ ๋์ ํ ๋ฟ์ ๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ๋ชจ๋ ๊ฐ๋ ๊ณผ ๊ธฐ์ ์ด ์ต์ OpenGL ๋ฒ์ ์์ ๋์ผํ๊ฒ ์ ์ง๋๋ฏ๋ก OpenGL 3.3์ ํ์ตํ๋ ๊ฒ์ด ์๋ฒฝํ๊ฒ ์ ํจํฉ๋๋ค.
์ธ์ ๋ ์ง ์ค๋น๊ฐ ๋์๊ฑฐ๋ ๊ฒฝํ์ด ํ๋ถํ๋ฉด ์ต์ OpenGL ๋ฒ์ ์ ํน์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค.
1
|
์ต์ ๋ฒ์ ์ OpenGL ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ฉด ์ต์ ๊ทธ๋ํฝ ์นด๋๋ง ์์ฉ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์์ต๋๋ค.
์ด๊ฒ์ด ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ค์ด ์ผ๋ฐ์ ์ผ๋ก ๋ฎ์ ๋ฒ์ ์ OpenGL์ ๋ชฉํ๋ก ํ๊ณ ์ ํ์ ์ผ๋ก ๋ ๋์ ๋ฒ์ ์ ๊ธฐ๋ฅ์ ๊ฐ๋ฅํ๊ฒ ํ๋ ์ด์ ์ ๋๋ค. |
cs |
์ผ๋ถ ์ฑํฐ์์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ธฐ๋ก๋ ๋ณด๋ค ํ๋์ ์ธ ๊ธฐ๋ฅ์ ํ์ธํ ์ ์์ต๋๋ค.
ํ์ฅ
OpenGL์ ํฐ ํน์ง์ ํ์ฅ ๊ธฐ๋ฅ์ ์ง์ํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ํฝ ํ์ฌ์์ ๋ ๋๋ง์ ์ํ ์๋ก์ด ๊ธฐ์ ์ด๋ ์๋ก์ด ๋๊ท๋ชจ ์ต์ ํ๋ฅผ ์ ์ํ ๋๋ง๋ค ๋๋ผ์ด๋ฒ์ ๊ตฌํ๋ ํ์ฅ ๊ธฐ๋ฅ์์ ์ข ์ข ๋ฐ๊ฒฌ๋ฉ๋๋ค.
์์ฉํ๋ก๊ทธ๋จ์ด ์คํ๋๋ ํ๋์จ์ด๊ฐ ์ด๋ฌํ ํ์ฅ์ ์ง์ํ๋ ๊ฒฝ์ฐ ๊ฐ๋ฐ์๋ ํ์ฅ์์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๋ณด๋ค ๊ณ ๊ธ ๋๋ ํจ์จ์ ์ธ ๊ทธ๋ํฝ์ ๊ตฌํํ ์ ์์ต๋๋ค.
์ด๋ฌํ ๋ฐฉ์์ผ๋ก ๊ทธ๋ํฝ ๊ฐ๋ฐ์๋ ํ์ฅ ๊ธฐ๋ฅ์ด ๊ทธ๋ํฝ ์นด๋์์ ์ง์๋๋์ง ํ์ธํ๊ธฐ๋ง ํ๋ฉด OpenGL์ด ํฅํ ๋ฒ์ ์ ๊ธฐ๋ฅ์ ํฌํจํ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ ์ด๋ฌํ ์๋ก์ด ๋ ๋๋ง ๊ธฐ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
์ข ์ข ํ์ฅ์ด ์ธ๊ธฐ๊ฐ ์๊ฑฐ๋ ๋งค์ฐ ์ ์ฉํ ๊ฒฝ์ฐ ๋์ค์ OpenGL ๋ฒ์ ์ ์ผ๋ถ๊ฐ ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ ์ด๋ฌํ ํ์ฅ์ ์ฌ์ฉํ๊ธฐ ์ (๋๋ OpenGL ํ์ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ) ์ฌ์ฉ ๊ฐ๋ฅํ ํ์ฅ์ด ์๋์ง ๋ฌธ์ํด์ผ ํฉ๋๋ค.
์ด๋ฅผ ํตํด ๊ฐ๋ฐ์๋ ํ์ฅ์ ์ฌ์ฉํ ์ ์๋์ง ์ฌ๋ถ์ ๋ฐ๋ผ ๋ ๋์ ์์ ๋๋ ๋ ํจ์จ์ ์ธ ์์ ์ ์ํํ ์ ์์ต๋๋ค.
1
2
3
4
5
6
7
8
|
if(GL_ARB_extension_name)
{
// Do cool new and modern stuff supported by hardware
}
else
{
// Extension not supported: do it the old way
}
|
cs |
OpenGl ๋ฒ์ 3.3์์๋ ๋๋ถ๋ถ์ ๊ธฐ์ ์ ํ์ฅํ ํ์๊ฐ ๊ฑฐ์ ์์ง๋ง ํ์ํ ๊ฒฝ์ฐ ์ ์ ํ ์ง์นจ์ด ์ ๊ณต๋ฉ๋๋ค.
์ํ ๋จธ์
OpenGL์ ๊ทธ ์์ฒด๋ก ๋๊ท๋ชจ ์ํ ์์คํ ์ผ๋ก, OpenGL์ด ํ์ฌ ์๋ํ๋ ๋ฐฉ์์ ์ ์ํ๋ ๋ณ์ ๋ชจ์์ ๋๋ค.
OpenGL์ ์ํ๋ฅผ ์ผ๋ฐ์ ์ผ๋ก OpenGL ์ปจํ ์คํธ๋ผ๊ณ ํฉ๋๋ค. OpenGL์ ์ฌ์ฉํ ๋ ์ผ๋ถ ์ต์ ์ ์ค์ ํ๊ณ ๋ฒํผ๋ฅผ ์กฐ์ํ ๋ค์ ํ์ฌ ์ปจํ ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋๋งํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์๋ฅผ ๋ค์ด, OpenGL์ด ์ผ๊ฐํ ๋์ ์ ์ ๊ทธ๋ฆฌ๊ณ ์ถ๋ค๊ณ ๋งํ ๋๋ง๋ค OpenGL์ด ๊ทธ๋ฆฌ๋ ๋ฐฉ๋ฒ์ ์ค์ ํ๋ ์ผ๋ถ ์ปจํ ์คํธ ๋ณ์๋ฅผ ๋ณ๊ฒฝํ์ฌ OpenGL์ ์ํ๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
OpenGL์ ์ ์ ๊ทธ์ด์ผ ํ๋ค๊ณ ๋งํด ์ปจํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฆ์ ๋ค์ ๊ทธ๋ฆฌ๊ธฐ ๋ช ๋ น์ ์ผ๊ฐํ ๋์ ์ ์ ๊ทธ๋ฆฝ๋๋ค.
OpenGL์์ ์์ ํ ๋ ์ปจํ ์คํธ๋ฅผ ๋ณ๊ฒฝํ๋ ์ฌ๋ฌ ์ํ ๋ณ๊ฒฝ ๊ธฐ๋ฅ๊ณผ OpenGL์ ํ์ฌ ์ํ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ผ๋ถ ์์ ์ ์ํํ๋ ์ฌ๋ฌ ์ํ ์ฌ์ฉ ๊ธฐ๋ฅ์ ๋ง๋๊ฒ ๋ฉ๋๋ค.
OpenGL์ด ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ ๋ํ ์ํ ์์คํ ์ด๋ผ๋ ๊ฒ์ ๊ธฐ์ตํ๋ ํ, ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ ๋ ์๋ฏธ๊ฐ ์์ ๊ฒ์ ๋๋ค.
์ค๋ธ์ ํธ
OpenGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ C๋ก ์์ฑ๋์ด ์์ผ๋ฉฐ ๋ค๋ฅธ ์ธ์ด๋ก ๋ง์ ํ์์ ํ์ฉํ์ง๋ง ํต์ฌ์ ์ผ๋ก๋ C๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ๋จ์ ์์ต๋๋ค.
C ์ธ์ด ๊ตฌ์กฐ ์ค ๋ง์ ๋ถ๋ถ์ด ๋ค๋ฅธ ๊ณ ๊ธ ์ธ์ด๋ก ์ ๋ฒ์ญ๋์ง ์๊ธฐ ๋๋ฌธ์ OpenGL์ ๋ช ๊ฐ์ง ์ถ์ํ๋ฅผ ์ผ๋์ ๋๊ณ ๊ฐ๋ฐ๋์์ต๋๋ค.
์ด๋ฌํ ์ถ์ํ ์ค ํ๋๋ OpenGL์ ๊ฐ์ฒด์ ๋๋ค.
OpenGL์ ๊ฐ์ฒด๋ OpenGL ์ํ์ ํ์ ์งํฉ์ ๋ํ๋ด๋ ์ต์ ๋ชจ์์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋๋ฉด ์ฐฝ์ ์ค์ ์ ๋ํ๋ด๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ์ฒด์ ํฌ๊ธฐ, ์ง์๋๋ ์์ ์ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ๊ฐ์ฒด์ ํฌ๊ธฐ, ์ง์๋๋ ์์ ์ ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค.
๋ฌผ์ฒด๋ฅผ C์ ๊ฐ์ ๊ตฌ์กฐ๋ก ์๊ฐํํ ์ ์์ต๋๋ค.
1
2
3
4
5
|
struct object_name {
float option1;
int option2;
char[] name;
};
|
cs |
๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ณ ์ ํ ๋๋ง๋ค ์ผ๋ฐ์ ์ผ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ ๋๋ค(OpenGL์ ์ปจํ ์คํธ๊ฐ ํฐ ๊ตฌ์กฐ๋ก ์๊ฐํ๋จ)
1
2
3
4
5
6
|
// The State of OpenGL
struct OpenGL_Context {
...
object_name* object_Window_Target;
...
};
|
cs |
1
2
3
4
5
6
7
8
9
10
|
// create object
unsigned int objectId = 0;
glGenObject(1, &objectId);
// bind/assign object to context
glBindObject(GL_WINDOW_TARGET, objectId);
// set options of object currently bound to GL_WINDOW_TARGET
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_WIDTH, 800);
glSetObjectOption(GL_WINDOW_TARGET, GL_OPTION_WINDOW_HEIGHT, 600);
// set context target back to default
glBindObject(GL_WINDOW_TARGET, 0);
|
cs |
์ด ์์ ์ฝ๋ ์กฐ๊ฐ์ OpenGL๋ก ์์ ํ ๋ ์์ฃผ ๋ณผ ์ ์๋ ์ํฌํ๋ก์ฐ์ ๋๋ค.
๋จผ์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ฐธ์กฐ๋ฅผ ID๋ก ์ ์ฅํฉ๋๋ค(์ค์ ๊ฐ์ฒด์ ๋ฐ์ดํฐ๋ ์ฌ ๋ค์ ์ ์ฅ๋จ).
๊ทธ๋ผ ๋ค์ ๊ฐ์ฒด(ID ์ฌ์ฉ)๋ฅผ ์ปจํ ์คํธ์ ๋์ ์์น์ ๋ฐ์ธ๋ฉํฉ๋๋ค(์: ์ฐฝ ๊ฐ์ฒด ๋์ ์์น๋ GL_WINDOW_TARGET์ผ๋ก ์ ์๋จ).
๋ค์์ผ๋ก ์ฐฝ ์ต์ ์ ์ค์ ํ๊ณ ๋ง์ง๋ง์ผ๋ก ์ฐฝ ๋์์ ํ์ฌ ๊ฐ์ฒด ID๋ฅผ 0์ผ๋ก ์ค์ ํ์ฌ ๊ฐ์ฒด์ ๋ฐ์ธ๋ฉ์ ํด์ ํฉ๋๋ค.
์ค์ ํ ์ต์ ์ objectId์์ ์ฐธ์กฐํ๋ ๊ฐ์ฒด์ ์ ์ฅ๋๊ณ ๊ฐ์ฒด๋ฅผ GL_WINDOW_TARGET์ ๋ค์ ๋ฐ์ธ๋ฉํ๋ ์ฆ์ ๋ณต์๋ฉ๋๋ค.
1
|
์ง๊ธ๊น์ง ์ ๊ณต๋ ์ฝ๋ ์ํ์ OpenGL์ด ์๋ํ๋ ๋ฐฉ์์ ๋ํ ๊ทผ์ฌ์น์ผ ๋ฟ์ด๋ฉฐ, ์ฑ
์ ์ฒด์์ ์ค์ ์์ ๋ฅผ ์ถฉ๋ถํ
๋ณผ ์ ์์ต๋๋ค. |
cs |
์ด๋ฌํ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ์์ฉ ํ๋ก๊ทธ๋จ์์ ๋ ์ด์์ ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ณ ์ต์ ์ ์ค์ ํ ์ ์์ผ๋ฉฐ OpenGL์ ์ํ๋ฅผ ์ฌ์ฉํ๋ ์์ ์ ์์ํ ๋๋ง๋ค ์ํ๋ ์ค์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 3D ๋ชจ๋ธ ๋ฐ์ดํฐ(์ง ๋๋ ์บ๋ฆญํฐ)์ ์ปจํ ์ด๋ ๊ฐ์ฒด ์ญํ ์ ํ๋ ๊ฐ์ฒด๊ฐ ์์ผ๋ฉฐ, ์ด ์ค ํ๋๋ฅผ ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋๋ง๋ค ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ๊ทธ๋ฆด ๋ชจ๋ธ ๋ฐ์ดํฐ๊ฐ ๋ค์ด ์๋ ๊ฐ์ฒด๋ฅผ ๋ฐ์ธ๋ฉํฉ๋๋ค(์ด๋ฌํ ๊ฐ์ฒด์ ๋ํ ์ต์ ์ ๋จผ์ ๋ง๋ค๊ณ ์ค์ ํ์ต๋๋ค).
๊ฐ์ฒด๊ฐ ์ฌ๋ฌ ๊ฐ ์์ผ๋ฉด ๋ง์ ๋ชจ๋ธ์ ์ง์ ํ ์ ์๊ณ ํน์ ๋ชจ๋ธ์ ๊ทธ๋ฆฌ๊ณ ์ถ์ ๋๋ง๋ค ๋ชจ๋ ์ต์ ์ ๋ค์ ์ค์ ํ์ง ์๊ณ ํด๋น ๊ฐ์ฒด๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ๊ฐ๋จํ ๋ฐ์ธ๋ฉํ ์ ์์ต๋๋ค.
์์ํ์
์ด์ OpenGL์ ์ฌ์๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ, OpenGL์ด ํ๋ ์๋์์ ์ด๋ป๊ฒ ์์ฉํ๋์ง, ๊ทธ๋ฆฌ๊ณ OpenGL์ด ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง ์ฌ์ฉ์ ์ง์ ๊ธฐ์ ์ ๋ํด ์์๋ดค์ต๋๋ค.
๋ชจ๋ ๊ฒ์ ์ดํดํ์ง ๋ชปํ๋๋ผ๋ ๊ฑฑ์ ํ์ง ๋ง์ญ์์ค.
์ด ์ฑ ์์๋ ๊ฐ ๋จ๊ณ๋ฅผ ํตํด OpenGL์ ์ ๋๋ก ํ์ ํ ์ ์๋ ์ถฉ๋ถํ ์๋ฅผ ๋ณผ ์ ์์ต๋๋ค.
์ถ๊ฐ ์๋ฃ๋ค
- opengl.org : OpenGL์ ๊ณต์ ์น์ฌ์ดํธ์ ๋๋ค.
- OpenGL registry : ๋ชจ๋ OpenGL ๋ฒ์ ์ ๋ํ OpenGL ์ฌ์ ๋ฐ ํ์ฅ์ ํธ์คํธํฉ๋๋ค.
'๊ณต๋ถ > LearnOpenGL ๋ฒ์ญ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฒ์ญ] LearnOpenGL 1.์์ํ๊ธฐ - window ๋ง๋ค๊ธฐ (0) | 2023.01.12 |
---|---|
[๋ฒ์ญ] LearnOpenGL - ์๊ฐ (0) | 2023.01.08 |