๐ Direct3D Tutorial3
https://docs.microsoft.com/en-us/previous-versions//ff729720(v=vs.85)?redirectedfrom=MSDN
์ ๋ด์ฉ์ ์ฐธ๊ณ ํ์ฌ ์ ๋ฆฌํ ๋ด์ฉ์ ๋๋ค.
Tutorial3 :
1) ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ํตํด ์ผ๊ฐํ์ ๊ทธ๋ฆฌ๋ ๊ณผ์ ์์๋ณด๊ธฐ
2) ์
ฐ์ด๋
๐ Shaders (์
ฐ์ด๋)
Direct3D 11์ ์ ์ ์
ฐ์ด๋, ์ง์ค๋ฉํธ๋ฆฌ ์
ฐ์ด๋, ํฝ์
์
ฐ์ด๋๋ฅผ ์ง์ํ๋ค.
์ ์ ์
ฐ์ด๋๋ ์ ์ ์ ์
๋ ฅ์ผ๋ก ๋ฐ์ ์ ์ ๋ฒํผ๋ฅผ ํตํด GPU๋ก ์ ๋ฌ๋๋ ๋ชจ๋ ์ ์ ์ ๋ํด ํ ๋ฒ์ฉ ์คํ๋๋ค.
์ง์ค๋ฉํธ๋ฆฌ ์
ฐ์ด๋๋ ์ , ์ , ์ผ๊ฐํ ๋ฑ์ ์
๋ ฅ์ผ๋ก ๋ฐ์ ๊ฐ๊ฐ ํ ๋ฒ์ฉ ์คํ๋๋ค.
ํฝ์
์
ฐ์ด๋๋ ๋ ๋๋งํ๊ณ ์ ํ๋ ํฝ์
๋ง๋ค ํ ๋ฒ์ฉ ์คํ๋๋ค.
์ง์ค๋ฉํธ๋ฆฌ ์ ฐ์ด๋๋ ์ ํ์ฌํญ์ด๋ค.
์คํ ์์ : ์ ์ ์ ฐ์ด๋ -> (์ง์ค๋ฉํธ๋ฆฌ ์ ฐ์ด๋) -> ๋ ์คํฐ๋ผ์ด์ -> ํฝ์ ์ ฐ์ด๋
๐ Vertex Shaders (์ ์ ์ ฐ์ด๋)
GPU๋ ์ ์ ๋ฒํผ๋ฅผ ๋ฐ์์ ๊ฐ ์ ์ ๋ค์ ํ์ฑํ ์ํจ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ์ ์ ฐ์ด๋์๊ฒ ์ ๋ ฅ ํ๋ผ๋ฏธํฐ๋ก ์ ์ ๋ฐ์ดํฐ๋ค์ ์ ๋ฌํ๋ค.
์ ์ ์
ฐ์ด๋์ ๊ฐ์ฅ ์ค์ํ ์ญํ ์ ๋ณํ(transformation)์ด๋ค. ์ด๋ ๋ฒกํฐ๋ฅผ ํ ์ขํ๊ณ์์ ๋ค๋ฅธ ์ขํ๊ณ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋งํ๋ค.
์๋ฅผ ๋ค์ด ์ผ๊ฐํ์ด 2D ํ
์ค์ฒ ๋ฒํผ์ ๊ทธ๋ ค์ง ๋ GPU๋ ๊ผญ์ง์ ์ด ๊ทธ๋ ค์ง ๋ฒํผ ์์ ์ ์ 2D ์ขํ๋ฅผ ์์์ผ ํ๋ค.
์ฐ์ ์ด ํํ ๋ฆฌ์ผ์์๋ ๋ณํ์ ์งํํ์ง ์๋๋ค.
Direct3D 11 ํํ ๋ฆฌ์ผ์์๋ ์ ฐ์ด๋๋ฅผ HLSL(High-Level Shading Language)๋ก ์์ฑํ์๋ค.
์ ์ ์ ฐ์ด๋๋ ๋ค์๊ณผ ๊ฐ๋ค.
๐ ์ ์ ์ ฐ์ด๋
float4 VS( float4 Pos : POSITION ) : SV_POSITION
{
return Pos;
}
VS : ์ ์ ์
ฐ์ด๋์ ์๋ฏธ
POSITION(์
๋ ฅ๋ณ์) : ์ด์ ์ ์ค์ ํ ์ ์ ์ ์์น๋ฅผ ํฌํจํ๋ semantic
SV_POSITION : ์ด๋ฏธ ์ ์๋์ด ์๋ semantic. clip-space ์์น๋ฅผ ์ ์ํ๋ค๋ ๊ฒ์ ๊ทธ๋ํฝ ํ์ดํ๋ผ์ธ์ ์๋ ค์ฃผ๋ ์ญํ
๐ Pixel Shaders (ํฝ์ ์ ฐ์ด๋)
๋ชจ๋ํฐ๋ ํฝ์ ๋ค์ 2์ฐจ์ ๊ฒฉ์์ด๊ณ , ๊ฐ๊ฐ์ ํฝ์ ๋ค์ ๋ ๋ฆฝ์ ์ธ ์๊น์ ๊ฐ์ง๊ณ ์๋ค. ๋ฐ๋ผ์ ์ฐ๋ฆฌ๊ฐ ๋ณด๋ ์ผ๊ฐํ์ ์ค์ ๋ก๋ ์๋ ๊ทธ๋ฆผ์์ ์ค๋ฅธ์ชฝ๊ณผ ๊ฐ์ ํํ์ด๋ค.
์ธ ๊ฐ์ ์ ์ ์ผ๋ก ์ ์๋ ์ผ๊ฐํ์ ํฝ์
๋ชจ์์ผ๋ก ๋ณํํ๋ ๊ณผ์ ์ ๋ ์คํฐ๋ผ์ด์ฆ๋ผ๊ณ ํ๋ค. GPU๋ ๋จผ์ ๋ ๋๋ง๋๋ ์ผ๊ฐํ์ ํฌํจ๋๋ ํฝ์
์ ๊ฒฐ์ ํ๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ ํฝ์
์ ๋ํด ํ์ฑ ํฝ์
์
ฐ์ด๋๋ฅผ ํธ์ถํ๋ค.
ํฝ์
ธ ์
ฐ์ด๋์ ์ฃผ๋ ๋ชฉ์ ์ ์ ์ ์
ฐ์ด๋๋ ์ง์ค๋ฉํธ๋ฆฌ๋ถํฐ ์
๋ ฅ์ ์ป์ด์ ๊ฐ ํฝ์
์ ์๊น์ ๊ณ์ฐํ๋ ๊ฒ์ด๋ค.
์ด ์์์ ๊ณ์ฐํ ๋ค์ ๋ค์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋ณด๋ธ๋ค.
์์์ ๋ง๋ ์ ์ ์
ฐ์ด๋๋ SV_POSITION ์ด๋ผ๋ 4๊ฐ์ float์ด ํฝ์
์
ฐ์ด๋์ ์
๋ ฅ์ด ๋๋ค. ํฝ์
์
ฐ์ด๋์ outputํ์ ์ญ์ float4์ด๋ค.
๐ ํฝ์ ์ ฐ์ด๋
float4 PS( float4 Pos : SV_POSITION ) : SV_Target
{
return float4( 1.0f, 1.0f, 0.0f, 1.0f ); // Yellow, with Alpha = 1
}
SV_Target : ๋ ๋ ํ๊ฒ ํ์์ผ๋ก์ ์ถ๋ ฅ์ ์๋ฏธ
๐ Creating the Shaders (์ ฐ์ด๋ ๋ง๋ค๊ธฐ)
์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ ์ ์ ฐ์ด๋์ ํฝ์ ธ ์ ฐ์ด๋ ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค. D3DX11CompileFromFile()๋ฅผ ํธ์ถํ์ฌ ๋ง๋ค ์ ์๋ค.
๐ ์ดํ๋ฆฌ์ผ์ด์ ์ฝ๋์์ ์ ฐ์ด๋ ๋ง๋ค๊ธฐ
// Create the vertex shader
if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "VS", "vs_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pVSBlob, &pErrorBlob, NULL ) ) )
return FALSE;
// Create the pixel shader
if( FAILED( D3DX11CompileFromFile( "Tutorial03.fx", NULL, NULL, "PS", "ps_4_0", D3DCOMPILE_ENABLE_STRICTNESS, NULL, NULL, &pPSBlob, &pErrorBlob, NULL ) ) )
return FALSE;
๐ Putting It Together
์ต์ข ์ ์ผ๋ก ํ์ํ ๊ฒ๋ค์ ์ ๋ฆฌํด๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
1๋จ๊ณ : Tutorial2์์์ฒ๋ผ ์ ์ ๋ฐ์ดํฐ์ ์์ค ๋ฐ์ดํฐ ๋ง๋ค๊ธฐ
2๋จ๊ณ : Tutorial3์์์ฒ๋ผ ๋ฐ์ดํฐ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ๋ณํ(transform)ํ๋ ์
ฐ์ด๋ ๋ง๋ค๊ธฐ
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ Direct3D Tutorial3), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@mi_pine/Direct3D-Tutorial3์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค