ํ๋ก์ ํธ ๋ ์ด์์
Vulkan ์์ง์์๋ ๋ค์๊ณผ ๊ฐ์ ํด๋ ๋ ์ด์์์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
/assets
์๋ ์ด ๊ฐ์ด๋์์ ์ฌ์ฉํ ํ ์ค์ณ์ 3D ๋ชจ๋ธ์ด ๋ค์ด์์ต๋๋ค./bin
์ ์คํ ๊ฐ๋ฅํ ํ์ผ์ด ๋น๋๋ ๊ณณ์ ๋๋ค. ์์ ๊ณผ ์ ฐ์ด๋์ ๊ฒฝ๋ก๋ฅผ ๋จ์ํ๊ฒ ํ๊ธฐ ์ํด ์ผ๋ฐ์ ์ธ CMake ๋น๋ ํด๋๋ฅผ ์ฌ์ฉํ์ง ์์ต๋๋ค./shaders
๋ ์ ฐ์ด๋์ ์ปดํ์ผ๋ ์ ฐ์ด๋๊ฐ ์ถ๋ ฅ๋ ๊ณณ์ ๋๋ค./chapter-N
์๋ ์ด ๊ฐ์ด๋์ ๊ฐ ์ฑํฐ์ ์ฝ๋๊ฐ ๋ค์ด์์ต๋๋ค./third_party
์๋ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ค์ด์์ผ๋ฉฐ, ์์ค์ฝ๋์์ ๋ฐ๋ก ์ฌ์ฉ๊ฐ๋ฅํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ
์์ง์์ ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ /third_part
์ ๋ค์ด๊ฐ ์์ต๋๋ค. ์ ์ผํ๊ฒ ๋ด์ฅ๋์ง ์๋ ์์ธ๋ SDL์
๋๋ค.
๋ชจ๋ ์จ๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ด์ฅ๋์ด ์์ผ๋ฉฐ, CMake๊ฐ ์๋์ผ๋ก ๋น๋ํฉ๋๋ค. SDL์ ํ๋ก์ ํธ์ ๋ณ๋๋ก ๋น๋ํด์ผ ํ๋ฉฐ, CMake์๊ฒ ๊ทธ ์์น๋ฅผ ์๋ ค์ฃผ์ด์ผ ํฉ๋๋ค.
์ฌ์ฉํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
GLM (openGL Mathematics) Header only ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. GLM์ ์ฌ์ฉํด ํ๋ ฌ๊ณผ ๋ฒกํฐ ์ฐ์ฐ์ ์ํํ ๊ฒ์ ๋๋ค. ๋๋ถ๋ถ์ ์ํฉ์์ GLSL ํ์ ๊ณผ ์ง์ ์ ์ผ๋ก ํธํ๋๋ ํ์ ๋ค์ ๊ฐ๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด,
glm::mat4
๋ ์ ฐ์ด๋์์์mat4
์ ์ง์ ์ ์ผ๋ก ํธํ๋๋ฉฐ ์ ์ฌํ ์ฐ์ฐ์ ํ ์ ์์ต๋๋ค. ์ด๋ฆ์ OpenGL์ด ๋ค์ด๊ฐ ์์ง๋ง Vulkan์์๋ ์ ์๋ํฉ๋๋ค.SDL ์ฐฝ(window)์ ์ ๋ ฅ์ ๋ฐ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ๊ฐ๋ณ์ ์ผ๋ก ๋น๋ํด์ผ ํฉ๋๋ค. SDL์ ์ฐฝ์ ๋ง๋ค์ด ์ ๋ ฅ ์ฅ์น์ ์ ๊ทผํ๋ ๊ฐ์ฅ ๋๋ฆฌ ์ฐ์ด๋ ๊ฒ ์ค ํ๋์ ๋๋ค. SDL์ ๋๋ถ๋ถ์ ํ๋ซํผ์ ์ง์ํ๋ฉฐ ์๋ํฉ๋๋ค. ์ธ๋ฆฌ์ผ ์์ง, ์ ๋ํฐ, ์์ค, ๊ทธ ์ด์ธ์ ๋ค์ํ ๊ณณ์์ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ๋ก์ ํธ์์๋ ์ฐฝ์ ๋ง๋ค๊ณ ํค๋ณด๋ ์ ๋ ฅ๊ณผ ๊ฐ์ ์ธ๋ถ์ฌํญ์ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ผ๋ก SDL์ ์ฌ์ฉํ ๊ฒ์ ๋๋ค.
dear IMGUI ์ฌ์ฉํ๊ธฐ ์ฌ์ด GUI ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด๋ ์ฌ๋ผ์ด๋์ ์ฐฝ๊ณผ ๊ฐ์ ํธ์ง ๊ฐ๋ฅํ ์์ ฏ์ ์์ฑํ ์ ์๊ฒ ํด์ค๋๋ค. ๊ฒ์ ์ฐ์ ์์ ๋๋ฒ๊ทธ ํด๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ด ํ๋ก์ ํธ์์๋ ๋ ๋๋ง์ ์ํธ์์ฉํ ์ต์ ๋ค์ ๋ง๋๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
STB Image ์ด๋ฏธ์ง๋ฅผ ๋ก๋ฉํ๋ header only ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ด๋ฏธ์ง ํ์ผ์ ๋ก๋ฉํ๋ ๋ฐ ์ฌ์ฉ๋๋ ์๊ณ ๋น ๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. BMP, JPEG, ๊ทธ๋ฆฌ๊ณ ๊ธฐํ ๋ค๋ฅธ ํํ ์ด๋ฏธ์ง ํฌ๋งท๋ค์ ๋ก๋ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋ค๋ฅธ ์ ์ฌํ ๋จ์ผ ํ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์งํฉ์ ์ผ๋ถ์ ๋๋ค.
Tiny Obj Loader .Obj ๋ชจ๋ธ์ ๋ก๋ฉํ๋ header only ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. 3D ๋ชจ๋ธ์ ๋ถ๋ฌ์ค๋ ๋ฐ ์ฌ์ฉํ ์๊ณ ๋น ๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
Vk Bootstrap Vulkan์ ์ด๊ธฐํํ ๋ ํ์ํ ๋ง์ ์์ ๋ณด์ผ๋ฌํ๋ ์ดํธ(boilerplate)๋ฅผ ์ถ์ํํด์ค๋๋ค. ๋๋ถ๋ถ์ ์ฝ๋๋ ํ๋ฒ๋ง ์์ฑ๋๊ณ ์ดํ ์์ ํ ์ผ์ด ์๊ธฐ ๋๋ฌธ์ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ๋๋ถ๋ถ์ ๊ณผ์ ์ ์๋ตํ ๊ฒ์ ๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ธ์คํด์ค ์์ฑ, ์ค์์ฒด์ธ ์์ฑ, ๊ทธ๋ฆฌ๊ณ ํ์ฅ ๋ก๋ฉ๊ณผ ๊ฐ์ ์์ ์ ๋จ์ํ๊ฒ ๋ง๋ค์ด์ค๋๋ค. ์ดํ Vulkan์ ์๋์ ์ผ๋ก ์ด๊ธฐํํ๋ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ถ๋ก์์๋ ์ ๊ฑฐ๋ ๊ฒ์ ๋๋ค.
VMA (vulkan memory allocator) Vulkan์ ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๊ฐ ๊ตฌํ๋์ด์๋ header only ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. Vulkan์์๋ ๋ฒํผ, ์ด๋ฏธ์ง, ๊ทธ๋ฆฌ๊ณ ๋ค๋ฅธ ์์๋ค์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ๋ฅผ ์ฌ์ฉ์๊ฐ ์ง์ ๋ค๋ค์ผ ํฉ๋๋ค. ์ด๋ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ๋์์ ๊ณ ๋ คํ๋ฉด์ ์ฒ๋ฆฌํ๊ธฐ ๋งค์ฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. Vulkan Memory Allocator๋ ์ด๋ฅผ ๋์ ์ฒ๋ฆฌํ์ฌ ์ด๋ฏธ์ง๋ ๋ค๋ฅธ ์์์ ์์ฑ์ ์ฝ๊ฒ ์ํํ ์ ์์ต๋๋ค. ๊ฐ์ธ Vulkan ์์ง์ด๋ ์๋ฎฌ๋ ์ดํฐ์ ๊ฐ์ ์๊ท๋ชจ ํ๋ก์ ํธ์์ ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค. ์ธ๋ฆฌ์ผ ์์ง์ด๋ ๊ธฐํ AAA ์์ง๊ณผ ๊ฐ์ ๋๊ท๋ชจ ํ๋ก์ ํธ์์๋ ๊ฐ์์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์๊ฐ ๊ตฌํ๋์ด์์ต๋๋ค.
Next: Building Project