์•ˆ๋…• ๋น ๋ฐค๋น  ์•ผ๋งค์…ฐ์ด๋” ์‹œ๊ฐ„์ด์•ผ.

์˜ค๋Š˜์€ ์ €๋ฒˆ์— ๋งํ–ˆ๋˜ ์…ฐ์ด๋”์˜ ๊ตฌ์„ฑ์š”์†Œ 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์…ฐ์ด๋”๋งŒ ์จ์„œ๋„ ๊ฐ€๋Šฅํ• ...๋“ฏ? ๋‚˜์ค‘์— ํ™•์ธํ•ด๋ด„


์˜ค๋Š˜ ์‚ฌ์ง„์ด ์—†๋„ค, ๊ท€์ฐฎ์•„์„œ ์•ˆ๋„ฃ์—ˆ์Œ. ๋‹ค์Œ์— ๋˜ ์˜ฌ๊ฒŒย