์๋ ๋น ๋ฐค๋น ์ผ๋งค์ ฐ์ด๋ ์๊ฐ์ด์ผ.
์ค๋์ ์ ๋ฒ์ ๋งํ๋ ์ ฐ์ด๋์ ๊ตฌ์ฑ์์ Vertex์ Fragment์ค Vertex์ ๋ํด ์๊ธฐํด๋ณผ๊ฒ.ย
์ฌ์ ์์ vertex๋ฅผ ์ฐพ์๋ณด๋ฉด ์ ์ , ์ ์, ๊ผญ๋๊ธฐ ๋ฑ์ด๋ผ๊ณ ๋์ค๋๋ฐ,
๋ด๊ฐ ์ดํดํ vertex์ ๊ฐ๋ ์ ์กฐ๊ธ ๋ฌ๋ผ
์ฐ์ ์ ฐ์ด๋๋ฅผ ๋ง๋ค๋ฉด ๊ธฐ๋ณธ์ ์ผ๋ก ์๋ ์ฝ๋๊ฐ ์์ด.
//
// Simple passthrough vertex shader
//
attribute vec3 in_Position; ย ย ย ย ย ย ย ย ย // (x,y,z)
//attribute vec3 in_Normal; ย ย ย ย ย ย ย ย ย // (x,y,z) ย ย unused in this shader.
attribute vec4 in_Colour; ย ย ย ย ย ย ย ย ย ย // (r,g,b,a)
attribute vec2 in_TextureCoord; ย ย ย ย ย ย ย // (u,v)
varying vec2 v_vTexcoord;
varying vec4 v_vColour;
void main()
{
ย ย vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0);
ย ย gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos;
ย ย ย
ย ย v_vColour = in_Colour;
ย ย v_vTexcoord = in_TextureCoord;
}
ํฌ๊ฒ๋ณด๋ฉด attribute๋ผ๊ณ ์จ์ ธ์๋๊ฑฐ๋, varying, ๊ทธ๋ฆฌ๊ณ void main์์ ์ค์ฌ ์ฝ๋๊ฐ ์์ด.
์ผ๋จ attribute๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฃผ์ด์ง ๊ฐ์ด์ผ. in_Position ์ ๊ฒฝ์ฐ ๊ทธ๋ฆผ์ ๋ชจ์ต์ X,Y,Z(3D์๊ฒฝ์ฐ)๊ฐ์ ๊ฐ์ง๊ณ ์์ด. ์ด๊ฒ ์กฐ๊ธ ํน์ดํ๋ฐ, ๋ฐ์์ ๋ ์์ธํ๊ฒ ์ค๋ช ํ ๊ฒ.
๋๋ฒ์งธ๋ in_Colour๊ฐ์ด์ผ. in_Position๊ฐ์ ๋ฐ๋ฅธ rgba๊ฐ์ ์ ์ฅํ์ง(๋ชจ๋ฅด๋์ฌ๋ ์๊ฒ ์ง๋ง, ๋นจ๊ฐ, ์ด๋ก, ํ๋, ํฌ๋ช ๋ ๊ฐ์ด์ผ)
์ธ๋ฒ์งธ๋ in_TextureCoord์ธ๋ฐ, ์ด๊ฑด ์์งํ ์ ๋ชจ๋ฅด๊ฒ ์ด... ๊ฑด๋๋ฆฌ์ง ๋ง๊ณ ๊ทธ๋ฅ ๋๋๋ก ํ์.
Varying์ด๋ผ๊ณ ์ฐ์ฌ์ ธ ์๋๊ฑฐ๋ Vertex์ Shader๋ฅผ ์ค๊ณ ๊ฐ์ ์๋ ๋ณ์์ผ. ์ด๊ฒ๋ ์๊ฑด๋๋ฆฌ๋๊ฒ ๋์.
๋ง์ง๋ง์ผ๋ก ๋ฉ์ธ์ฝ๋๊ฐ ์๋๋ฐ,๊ฐ์ด๋ฐ์ย gl_Position์ ์ค์ ๊ทธ๋ ค์ง ์์น๋ฅผ ๋ปํ๊ณ , ๊ทธ ๋ค์ gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION]์... ๋์๋ง ๋ณด๋ฉด ๋ญ๋ผ๊ณ ๋์ค๋๋ฐ ๋ญ์๋ฆฐ์ง ํ๋๋ ๋ชจ๋ฅด๊ฒ ๋๋ผ. ๊ฑ ๊ฑด๋๋ฆฌ์ง๋ง...
๋ค์ ์๋ object_space_pos๊ฐ ๋ด๊ฐ ์ฃผ๋ก ๊ฑด๋๋ฆฌ๋๊ฑด๋ฐ, ๋ด๊ฐ์ดํดํ ๋ฐ๋ก๋ ์ ๊ธฐ ์ฐ์ฌ์ง ์์น = gl_Position ๊ฐ๊ฑธ๋?
๊ทธ๋ฌ๋๊น ๋ง์ฝ in_Position.x๋์ in_Position.x/2.0์ ๋ฃ์ด์ฃผ๋ฉด X์์น์ ์์ด์ผ ํ ๊ณณ์ด ๋ฐ์ผ๋ก ๊น์ธ๋ค๋ ๊ฑฐ์ง. ์ฌ์ง์ ๊ท์ฐฎ์์ ์ค๋์ ์๋ฃ๊ธฐ๋กํจ.
์ ๊ธ๊ณ , ์ 2 ๋์ 2.0์ ์จ๋ฃ๋๋ฉด ์ ฐ์ด๋ ์ธ๋ ๊ฐ์ ๋ฌด์กฐ๊ฑด floatํ์์ผ๋ก ๋ฃ์ด์ผ๋จ. 0์ ์ฐ๋๋ผ๋ 0์ ์ฐ๋ฉด ์๋๊ณ 0.0์ด๋ผ๊ณ ์จ์ผํ๋๊ฑฐ์ง. ์๊ทธ๋ฌ๋ฉด ์๋ฌ๋... ์๊ทธ๋ฐ์ง ๋ฌป์ง๋ง๊ณ
๋ฐ์ v_vColour = in_Colour์ด๋ ๊ทธ๋ฐ์๊ป varying๊ฐ vertex์์ fragment๋ก ๋๊ฒจ์ฃผ๋๊ฑฐ๋๊น ์ ๊ฒฝ ์์จ๋ ๋ผ.
์ฌ์ค Vertex ์ ฐ์ด๋ ์ฐ๋๊ฑด ๋๊ฒ ์ด๋ ค์... ๋๋ ์ผ๋งค๋ก ์ฐ๋๊ฑฐ๋ผ์ ์ ๋ชจ๋ฅด๊ธฐ๋ ํ๊ณ , Fragment ์ ฐ์ด๋ ์ฐ๋๊ฒ ํ ์ด์ด์ผ์ฌ ๋ ์ฝ๊ธฐ๋ ํ๋ฐ ์ด๋ ๊ฒ ์ผ๋งค๋ก๋ผ๋ ํ๋ ์ด์ ๊ฐ ๋ญ๋๋ฉด...ย
Fragment ๋ก ๋ชจ์์ ๋ฐ๊ฟ๋ ๋ณด๋ฉด ์๋์ด ๋ฐ์ผ๋ก ์์ ธ๋์ค๊ฒ ๊ทธ๋ ค์ผ ๋ ๋๋ ์๋๋ฐ ์ด ๋ฏธ์น๋์ด ๋ง์คํฌ๋ฐ์ผ๋ก ๊ทธ๋ ค์ง์ง๊ฐ ์์์ ์ด์ํ๊ฒ ๋๋ฒ๋ฆผ. ์ด๊ฑด ์์ด๋ฐ์ง Fragment ๋ค๋ฃฐ๋ ๊ฐ์ผ์ค๊ฒ.
๊ทผ๋ฐ ์ด๊ฑฐ ์ฐ๋ฉด์ ๊นจ๋ฌ์๊ฑด๋ฐ, ๊ฑ surfaceํ๋ ๋ง๋ค์ด์ ๊ทธ surface์๋ค๊ฐ sprite๊ทธ๋ ค์ ๊ทธ surface ๋ณํ์ํค๋ฉด Fragment์ ฐ์ด๋๋ง ์จ์๋ ๊ฐ๋ฅํ ...๋ฏ? ๋์ค์ ํ์ธํด๋ด
์ค๋ ์ฌ์ง์ด ์๋ค, ๊ท์ฐฎ์์ ์๋ฃ์์. ๋ค์์ ๋ ์ฌ๊ฒย
์จ๋๊ณ ๋ณด๋๊น ์ง์ง ๋์ถฉํ๋ค... Vertex์ ฐ์ด๋ ๊ฑ ์์ฐ๋๊น ๋์ค์ Fragment์ธ๋๋ ๋ค์์ค์
๋ฐฉ๊ธ surface์จ์ํ๋๊ฑฐ ํ์ธํด๋ณด๊ณ ์๋๋ฐ ๋จ. ๋ด์ผ์ด๋ ์๊ฐ๋จ์๋ ์ฌ๋ ค์ค๊ฒ