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 |