{"id":450,"date":"2007-08-23T17:25:00","date_gmt":"2007-08-23T17:25:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=450"},"modified":"2017-01-29T11:17:08","modified_gmt":"2017-01-29T02:17:08","slug":"opengl-shader-12","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=450","title":{"rendered":"OpenGL Shader &#8211; 12"},"content":{"rendered":"<p><strong>GLSL\uc744 \uc704\ud55c OpenGL \uc124\uc815 &#8211; Uniform \ubcc0\uc218<br \/>\n<\/strong>\uc6d0\ubb38 : <a href=\"http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogluniform\">http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogluniform<\/a><\/p>\n<p>Uniform \ubcc0\uc218\ub294 \uc624\ub85c\uc9c0 Primitive\uc5d0 \uc758\ud574 \ubcc0\uacbd\ub420 \uc218 \uc788\ub294 \ubcc0\uc218\uc778\ub370, glBegin\uacfc glEnd \uc0ac\uc774\uc5d0\uc11c\ub294 \ubcc0\uacbd\ub420 \uc218 \uc5c6\ub2e4. \uc774\ub7ec\ud55c \uc774\uc720\ub85c\ud574\uc11c \ubc84\ud14d\uc2a4\uc758 \uc18d\uc131\uc744 \uc704\ud574\uc11c\ub294 \uc0ac\uc6a9\ub420 \uc218 \uc5c6\ub2e4. \ub9cc\uc57d \ubc84\ud14d\uc2a4\uc758 \uc18d\uc131\uc5d0 \ub300\ud55c \ubcc0\uc218\ub97c \uc6d0\ud55c\ub2e4\uba74, \uc774 \uc139\uc120 \ubc14\ub85c \ub2e4\uc74c \uc139\uc158\uc778 Attribute \ubcc0\uc218\ub97c \ubcf4\uba74\ub41c\ub2e4. Uniform \ubcc0\uc218\ub294 Primitive\ub098 \ud504\ub808\uc784 \ub610\ub294 \uc804\uccb4 \uc7a5\uba74 \ub3d9\uc548\uc5d0 \uc720\uc9c0\ud574\uc57c\ud560 \ubcc0\uc218\uc5d0 \uc801\ub2f9\ud558\ub2e4. Uniform \ubcc0\uc218\ub294 \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\ub098 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \uc77d\uc744 \uc218 \uc788\uc9c0\ub9cc \uc4f8\uc218\ub294 \uc5c6\ub2e4.<\/p>\n<p>Uniform \ubcc0\uc218\ub97c \uc815\uc758\ud558\ub294 \uac00\uc7a5 \uba3c\uc800 \ud574\uc57c\ud560 \uc77c\uc740 \ubcc0\uc218\uc5d0 \ub300\ud55c \uba54\ubaa8\ub9ac \uc704\uce58\ub97c \uc5bb\ub294 \uac83\uc774\ub2e4. \uc250\uc774\ub354 \ud504\ub85c\uadf8\ub7a8\uc774 \ub9c1\ud06c\ub41c \ud6c4\uc5d0\uc57c \ubcc0\uc218\uc5d0 \ub300\ud55c \uba54\ubaa8\ub9ac \uc815\ubcf4\ub97c \uc5bb\uc5b4\uc624\ub294 \uac83\uc774 \uac00\ub2a5\ud558\ub2e4\ub294 \uc810\uc5d0 \uc8fc\uc758\ud558\uae30 \ubc14\ub780\ub2e4. \uba87\uba87\uc758 \uadf8\ub798\ud53d \uce74\ub4dc \ub4dc\ub77c\uc774\ubc84\uc5d0\uc11c\ub294 \uba54\ubaa8\ub9ac\uc758 \uc704\uce58\ub97c \uc5bb\uc5b4\uc624\uae30 \uc704\ud574 \uba3c\uc800 glUseProgram(OpenGL 2.0) \ub610\ub294 glUseProgramObjectARB(ARB \ud655\uc7a5)\uc744 \ud638\ucd9c\ud574\uc57c\ud560 \uacbd\uc6b0\ub3c4 \uc788\ub2e4\ub294 \uc810\uc744 \uc8fc\uc758\ud558\uc790.<\/p>\n<p>\ubcc0\uc218\ub97c \ucc98\ub9ac\ud560\ub54c OpenGL 2.0\uacfc ARB \ud655\uc7a5\uc740 \ub9e4\uc6b0 \uc720\uc0ac\ud55c \ubb38\ubc95\uc744 \uac00\uc9c0\uace0 \uc788\ub2e4. \uae30\ubcf8\uc801\uc73c\ub85c OpenGL 2.0 \ud568\uc218\uc758 \ub4a4\uc5d0 ARB\ub97c \ubd99\uc774\uba74 ARB \ud655\uc7a5 \ud568\uc218\uac00 \ub418\ub294 \uacbd\uc6b0\uac00 \ub9ce\ub2e4.<\/p>\n<p>\ub2e4\uc74c OpenGL 2.0\ud615\ud0dc\uc758 \ud568\uc218\ub294 \uc8fc\uc5b4\uc9c4 \uc774\ub984\uc5d0 \ub300\ud55c Uniform \ubcc0\uc218(\uc250\uc774\ub354 \uc548\uc5d0\uc11c \uc815\uc758)\uc758 \uc704\uce58\ub97c \uc5bb\uc5b4\uc628\ub2e4.<\/p>\n<p>GLint glGetUniformLocation(GLuint program, const char *name);<br \/>\nParameters:<br \/>\nprogram &#8211; \ud504\ub85c\uadf8\ub7a8\uc758 \ud578\ub4e4<br \/>\nname &#8211; \ubcc0\uc218\uc758 \uc774\ub984<\/p>\n<p>ARB \ud655\uc7a5\uc758 \ud615\ud0dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>GLint glGetUniformLocationARB(GLhandleARB program, const char *name);<br \/>\nParameters:<br \/>\nprogram &#8211; \ud504\ub85c\uadf8\ub7a8\uc758 \ud578\ub4e4<br \/>\nname &#8211; \ubcc0\uc218\uc758 \uc774\ub984<\/p>\n<p>\ubc18\ud658\uac12\uc774 \ubc14\ub85c \ubcc0\uc218\uc758 \uc704\uce58\uc778\ub370, \uc774 \ubcc0\uc218\uc5d0 \uac12\uc744 \ud560\ub2f9\ud560 \uc218 \uc788\ub2e4. Uniform \ubcc0\uc218\uc5d0 \uac12\uc744 \ud560\ub2f9\ud558\ub294 \ud568\uc218\uad70\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>void glUniform1f(GLint location, GLfloat v0);<br \/>\nvoid glUniform2f(GLint location, GLfloat v0, GLfloat v1);<br \/>\nvoid glUniform3f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);<br \/>\nvoid glUniform4f(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);<\/p>\n<p>\ub610\ub294<\/p>\n<p>GLint glUnform{1,2,3,4}fv(GLint location, GLsizei count, GLfloat *v);<\/p>\n<p>Parameters:<br \/>\nlocation &#8211; \uc774\uc804\uc5d0 \uad6c\ud55c \ubcc0\uc218\uc758 \uc704\uce58<br \/>\nv0, v1, v2, v3 &#8211; \uc2e4\uc218\uac12<br \/>\ncount &#8211; \ubc30\uc5f4\uc5d0\uc11c \uc694\uc18c\uc758 \uc218<br \/>\nv &#8211; \uc2e4\uc218 \ubc30\uc5f4<\/p>\n<p>ARB \ud655\uc7a5\uc758 \uacbd\uc6b0\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>void glUniform1fARB(GLint location, GLfloat v0);<br \/>\nvoid glUniform2fARB(GLint location, GLfloat v0, GLfloat v1);<br \/>\nvoid glUniform3fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2);<br \/>\nvoid glUniform4fARB(GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3);<\/p>\n<p>\ub610\ub294<\/p>\n<p>GLint glUnform{1,2,3,4}fvARB(GLint location, GLsizei count, GLfloat *v);<\/p>\n<p>Parameters:<br \/>\nlocation &#8211; \uc774\uc804\uc5d0 \uad6c\ud55c \ubcc0\uc218\uc758 \uc704\uce58<br \/>\nv0, v1, v2, v3 &#8211; \uc2e4\uc218\uac12<br \/>\ncount &#8211; \ubc30\uc5f4\uc5d0\uc11c \uc694\uc18c\uc758 \uc218<br \/>\nv &#8211; \uc2e4\uc218 \ubc30\uc5f4<\/p>\n<p>\uc704\uc758 \ud568\uc218\ub294 \uc2e4\uc218\ud0c0\uc785\uc758 \uacbd\uc6b0\uc774\uace0 \uc815\uc218\ud0c0\uc785\ub3c4 \uac00\ub2a5\ud55c\ub370,\u00a0 &#8220;f&#8221;\ub97c &#8220;i&#8221;\ub85c \ubc14\uafb8\uae30\ub9cc\ud558\uba74\ub41c\ub2e4. \ud558\uc9c0\ub9cc\u00a0 boolean \ud0c0\uc785\uc5d0 \ub300\ud55c \ud568\uc218\ub294 \uc5c6\ub2e4. Boolean\uc5d0 \ub300\ud55c \uacbd\uc6b0\uac00 \ud544\uc694\ud558\ub2e4\uba74 \uc2e4\uc218\ub098 \uc815\uc218\ud615 \ud568\uc218\uc5d0 \ub300\ud574\uc11c false\uc758 \uacbd\uc6b0 0\uc73c\ub85c \ud560\ub2f9\ud558\uc5ec \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4. uniform \ubcc0\uc218\uc758 \ubc30\uc5f4\uc744 \uac00\uc9c8 \uacbd\uc6b0, \ubca1\ud130\ub85c \uc0ac\uc6a9\ub420 \uc218 \uc788\ub2e4.<\/p>\n<p>sampler \ubcc0\uc218\uc5d0 \ub300\ud574\uc11c\ub294 OpenGL 2.0\uc5d0\uc11c\ub294 sampler\uc758 \ubc30\uc5f4\uc744 \uc124\uc815\ud558\uc5ec glUniform1i\ub098 glUniform1iv\ub97c \uc0ac\uc6a9\ud560 \uc218 \uc788\uc73c\uba70 ARB \ud655\uc7a5\uc758 \uacbd\uc6b0 glUniform1iARB\ub098 glUniform1ivARB\ub97c \uc0ac\uc6a9\ud558\uba74 \ub41c\ub2e4.<\/p>\n<p>GLSL\uc5d0\uc11c \ub9e4\ud2b8\ub9ad\uc2a4 \ub370\uc774\ud130 \ud0c0\uc785\ub3c4 \uc0ac\uc6a9\uc774 \uac00\ub2a5\ud558\uba70 \uc774 \ud0c0\uc785\uc5d0 \ub300\ud55c \ud568\uc218\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<p>GLint glUniformMatrix{2,3,4}fv(GLint location, GLsizei count, GLboolean transpose, GLfloat *v);<br \/>\nParameters:<br \/>\nlocation &#8211; \uc774\uc804\uc5d0 \uc9c8\uc758\ud55c \uc704\uce58<br \/>\ncount &#8211; \ud589\ub82c\uc758 \uac1c\uc218. \ub2e8\uc77c \ub9e4\ud2b8\ub9ad\uc2a4\ub77c\uba74 1\uc774\uace0 n \ub9e4\ud2b8\ub9ad\uc2a4 \ubc30\uc5f4\uc774\ub77c\uba74 n<br \/>\ntranspose &#8211; \uc804\uce58 \ud589\ub82c\uc778\uc9c0 \uc5ec\ubd80\uc774\uba70 1\uc778 \uacbd\uc6b0 Row \ubc29\ud5a5\uc73c\ub85c \ubc30\uc5f4\ub41c \ud589\ub82c\uc774\uba70 0\uc778 \uacbd\uc6b0 Column \ubc29\ud5a5\uc73c\ub85c \uc815\ub82c\ub41c \ud589\ub82c\uc744 \uc758\ubbf8\ud568<br \/>\nv &#8211; \uc2e4\uc218 \ubc30\uc5f4<\/p>\n<p>ARB \ud655\uc7a5\uc758 \uacbd\uc6b0\ub294 \uc544\ub798\uc640 \uac19\ub2e4.<\/p>\n<p>GLint glUniformMatrix{2,3,4}fvARB(GLint location, GLsizei count, GLboolean transpose, GLfloat *v);<br \/>\nParameters:<br \/>\nlocation &#8211; \uc774\uc804\uc5d0 \uc9c8\uc758\ud55c \uc704\uce58<br \/>\ncount &#8211; \ud589\ub82c\uc758 \uac1c\uc218. \ub2e8\uc77c \ub9e4\ud2b8\ub9ad\uc2a4\ub77c\uba74 1\uc774\uace0 n \ub9e4\ud2b8\ub9ad\uc2a4 \ubc30\uc5f4\uc774\ub77c\uba74 n<br \/>\ntranspose &#8211; \uc804\uce58 \ud589\ub82c\uc778\uc9c0 \uc5ec\ubd80\uc774\uba70 1\uc778 \uacbd\uc6b0 Row \ubc29\ud5a5\uc73c\ub85c \ubc30\uc5f4\ub41c \ud589\ub82c\uc774\uba70 0\uc778 \uacbd\uc6b0 Column \ubc29\ud5a5\uc73c\ub85c \uc815\ub82c\ub41c \ud589\ub82c\uc744 \uc758\ubbf8\ud568<br \/>\nv &#8211; \uc2e4\uc218 \ubc30\uc5f4<\/p>\n<p>\uc8fc\uc758\ud560 \uac83\uc740 \uc704\uc758 \ud568\uc218\ub4e4\uc744 \ud1b5\ud574 \uc124\uc815\ub41c Uniform \ubcc0\uc218\uc758 \uac12\ub4e4\uc740 \uc250\uc774\ub354 \ud504\ub85c\uadf8\ub7a8\uc774 \ub2e4\uc2dc \ub9c1\ud06c\ub420\ub3d9\uc548 \uc720\uc9c0\ub41c\ub2e4. \uc77c\ub2e8 \uc0c8\ub85c\uc6b4 \ub9c1\ud06c \ucc98\ub9ac\uac00 \uc218\ud589\ub418\uba74 \uc774 \uac12\ub4e4\uc740 \ubaa8\ub450 0\uc73c\ub85c \uc7ac\uc124\uc815\ub41c\ub2e4.<\/p>\n<p>\uac04\ub2e8\ud55c \uc18c\uc2a4\ucf54\ub4dc\ub97c \uc0b4\ud3b4\ubcf4\uc790.\u00a0 \ub9cc\uc57d \ub2e4\uc74c\uacfc \uac19\uc740 \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud558\ub294 \uc250\uc774\ub354\uac00 \uc788\ub2e4\uace0 \ud574\ubcf4\uc790.<\/p>\n<pre><code class=\"html\">uniform float specIntensity;\r\nuniform vec4 specColor;\r\nuniform float t[2];\r\nuniform vec4 colors[3];<\/code><\/pre>\n<p>OpenGL 2.0 \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c\ub294, \ubcc0\uc218 \uc124\uc815\uc744 \uc704\ud55c \ucf54\ub4dc\ub294 \ub2e4\uc74c\uacfc \uac19\uc744 \uac83\uc774\ub2e4.<\/p>\n<pre><code class=\"html\">GLint loc1,loc2,loc3,loc4;\r\nfloat specIntensity = 0.98;\r\nfloat sc[4] = {0.8,0.8,0.8,1.0};\r\nfloat threshold[2] = {0.5,0.25};\r\nfloat colors[12] = {0.4,0.4,0.8,1.0,\r\n                    0.2,0.2,0.4,1.0,\r\n                    0.1,0.1,0.1,1.0};\r\n\r\nloc1 = glGetUniformLocation(p,\"specIntensity\");\r\nglUniform1f(loc1,specIntensity);\r\n\r\nloc2 = glGetUniformLocation(p,\"specColor\");\r\nglUniform4fv(loc2,1,sc);\r\n\r\nloc3 = glGetUniformLocation(p,\"t\");\r\nglUniform1fv(loc3,2,threshold);\r\n\r\nloc4 = glGetUniformLocation(p,\"colors\");\r\nglUniform4fv(loc4,3,colors);<\/code><\/pre>\n<p>\uc704\uc758 \ucf54\ub4dc\uc5d0 \ub300\ud55c ARB \ud655\uc7a5 \ud615\ud0dc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre><code class=\"html\">GLint loc1,loc2,loc3,loc4;\r\nfloat specIntensity = 0.98;\r\nfloat sc[4] = {0.8,0.8,0.8,1.0};\r\nfloat threshold[2] = {0.5,0.25};\r\nfloat colors[12] = {0.4,0.4,0.8,1.0,\r\n                    0.2,0.2,0.4,1.0,\r\n                    0.1,0.1,0.1,1.0};\r\n\r\nloc1 = glGetUniformLocationARB(p,\"specIntensity\");\r\nglUniform1fARB(loc1,specIntensity);\r\n\r\nloc2 = glGetUniformLocationARB(p,\"specColor\");\r\nglUniform4fvARB(loc2,1,sc);\r\n\r\nloc3 = glGetUniformLocationARB(p,\"t\");\r\nglUniform1fvARB(loc3,2,threshold);\r\n\r\nloc4 = glGetUniformLocationARB(p,\"colors\");\r\nglUniform4fvARB(loc4,3,colors);<\/code><\/pre>\n<p>\uc704\uc758 \uc608\uc5d0 \ub300\ud55c \uc804\uccb4 \ucf54\ub4dc\uc758 \uc0d8\ud50c\uc740 \ub2e4\uc74c \ub9c1\ud06c\ub97c \ud1b5\ud574 \ub2e4\uc6b4\ub85c\ub4dc \ubc1b\uae30 \ubc14\ub780\ub2e4.<\/p>\n<p style='text-align:center'><a href=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1365923273.zip\"><img width='64' src='\/images\/download.svg' \/><\/a><a href=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1072761566.zip\"><img width='64' src='\/images\/download.svg' \/><\/a><\/p>\n<p>t\ub098 colors \ubcc0\uc218\uc758 \uacbd\uc6b0\uc640 specColor\uc758 4\uac1c\uc758 \uac12\uc744 \uac00\uc9c4 \ubca1\ud130\ub97c \uc124\uc815\ud558\ub294 \uac83\uacfc \uac19\uc740 \ubc30\uc5f4\uc744 \uc124\uc815\ud558\ub294 \ubd80\ubd84\uc744 \uc8fc\uc758\uae4a\uac8c \ubcf4\uae30 \ubc14\ub780\ub2e4. count \uc778\uc790(glGetUniform{1,2,3,4}fv)\uc758 \uac00\uc6b4\ub370 \uc778\uc790)\ub294 \uc250\uc774\ub354\uc5d0\uc11c \uc120\uc5b8\ub41c \ubc30\uc5f4 \uc694\uc18c\uc758 \uac1c\uc218\ub97c \uc758\ubbf8\ud558\uc9c0 OpenGL\uc5d0\uc11c \uc120\uc5b8\ub41c \uc694\uc18c\uc758 \uac1c\uc218\ub97c \uc758\ubbf8\ud558\ub294 \uac83\uc774 \uc544\ub2c8\ub2e4. \uc774\uac83\uc774 specColor\uac00 4\uac1c\uc758 \uac12\uc744 \uac00\uc9c0\uace0 \uc788\uc74c\uc5d0\ub3c4, glUniform4fv \ud568\uc218\uc758 \uc778\uc790 \uc911 count\ub294 1\ub85c \uc124\uc815\ub41c \uc774\uc720\uc778\ub370, specColor\ub294 \uc250\uc774\ub354\uc5d0\uc11c \ud558\ub098\uc758 \ubca1\ud130\ub85c \uc120\uc5b8\ub418\uc5c8\uae30 \ub54c\ubb38\uc774\ub2e4. specColor \ubcc0\uc218\ub97c \uc124\uc815\ud558\uae30 \uc704\ud55c \ub2e4\ub978 \ubc29\ubc95\uc740 \ub2e4\uc74c\uacfc \uac19\ub2e4.<\/p>\n<pre><code class=\"html\">loc2 = glGetUniformLocation(p,\"specColor\");\r\nglUniform4f(loc2,sc[0],sc[1],sc[2],sc[3]);<\/code><\/pre>\n<p>\ubc30\uc5f4 \uc548\uc758 \ubcc0\uc218\uc758 \uc704\uce58\ub97c \uc5bb\uae30 \uc704\ud574 GLSL\uc774 \uc81c\uacf5\ud558\ub294 \ub2e4\ub978 \ubc29\ubc95\uc774 \ub610 \uc788\ub294\ub370, \uc608\ub97c\ub4e4\uba74.. t[1]\uacfc \uac19\uc740 \ubcc0\uc218\uc758 \uc704\uce58\ub97c \uc5bb\uae30 \uc704\ud574 \ub2e4\uc74c\uacfc \uac19\uc774 \ud558\uba74 \ub41c\ub2e4.<\/p>\n<pre><code class=\"html\">loct0 = glGetUniformLocation(p,\"t[0]\");\r\nglUniform1f(loct0,threshold[0]);\r\n\r\nloct1 = glGetUniformLocation(p,\"t[1]\");\r\nglUniform1f(loct1,threshold[1]);<\/code><\/pre>\n<p>glGetUniformLocation\uc5d0\uc11c &#8216;[]&#8217;\ub97c \uc0ac\uc6a9\ud574\uc11c \uc6d0\ud558\ub294 \uc694\uc18c\uc758 \uad6c\uc131 \ubcc0\uc218\ub97c \uc9c0\uc815\ub418\ub294 \ubc29\ubc95\uc744 \uc0ac\uc6a9\ud574\uc11c \uc6d0\ud558\ub294 \ubc14\ub97c \uc5bb\ub294\ub2e4.<\/p>\n<p>\uc704\uc758 \uacbd\uc6b0\uc5d0 \ub300\ud55c ARB \ud655\uc7a5\uc740 ARB\ub97c \ud568\uc218 \uc774\ub984 \ub4a4\uc5d0 \ucd94\uac00\ud558\uba74 \ub3d9\uc77c\ud558\ubbc0\ub85c \uc5ec\uae30\uc5d0\uc11c\ub294 \uc0dd\ub7b5\ud558\uaca0\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GLSL\uc744 \uc704\ud55c OpenGL \uc124\uc815 &#8211; Uniform \ubcc0\uc218 \uc6d0\ubb38 : http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogluniform Uniform \ubcc0\uc218\ub294 \uc624\ub85c\uc9c0 Primitive\uc5d0 \uc758\ud574 \ubcc0\uacbd\ub420 \uc218 \uc788\ub294 \ubcc0\uc218\uc778\ub370, glBegin\uacfc glEnd \uc0ac\uc774\uc5d0\uc11c\ub294 \ubcc0\uacbd\ub420 \uc218 \uc5c6\ub2e4. \uc774\ub7ec\ud55c \uc774\uc720\ub85c\ud574\uc11c \ubc84\ud14d\uc2a4\uc758 \uc18d\uc131\uc744 \uc704\ud574\uc11c\ub294 \uc0ac\uc6a9\ub420 \uc218 \uc5c6\ub2e4. \ub9cc\uc57d \ubc84\ud14d\uc2a4\uc758 \uc18d\uc131\uc5d0 \ub300\ud55c \ubcc0\uc218\ub97c \uc6d0\ud55c\ub2e4\uba74, \uc774 \uc139\uc120 \ubc14\ub85c \ub2e4\uc74c \uc139\uc158\uc778 Attribute \ubcc0\uc218\ub97c \ubcf4\uba74\ub41c\ub2e4. Uniform \ubcc0\uc218\ub294 Primitive\ub098 \ud504\ub808\uc784 \ub610\ub294 \uc804\uccb4 \uc7a5\uba74 \ub3d9\uc548\uc5d0 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=450\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;OpenGL Shader &#8211; 12&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[3,25],"class_list":["post-450","post","type-post","status-publish","format-standard","hentry","category-opengl","tag-opengl","tag-shader"],"_links":{"self":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/450","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=450"}],"version-history":[{"count":2,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/450\/revisions"}],"predecessor-version":[{"id":3591,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/450\/revisions\/3591"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=450"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=450"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=450"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}