{"id":497,"date":"2007-09-20T14:55:00","date_gmt":"2007-09-20T14:55:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=497"},"modified":"2017-01-29T11:06:32","modified_gmt":"2017-01-29T02:06:32","slug":"opengl-shader-22","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=497","title":{"rendered":"OpenGL Shader &#8211; 22"},"content":{"rendered":"<p><strong>GLSL \uc608\uc81c &#8211; \ud230\uc250\uc774\ub529 3(\ucd1d4\uc7a5)<\/strong><br \/>\n\uc6d0\ubb38 : <a href=\"http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?toon2\">http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?toon2<\/a><\/p>\n<p>GLSL\uc740 OpenGL\uc758 \uc0c1\ud0dc\uc758 \uc77c\ubd80\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 OpenGL \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c glColor\ub85c \uc124\uc815\ub41c \uc0c9\uc744 \uc77d\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4\ubcf4\uaca0\ub2e4.<\/p>\n<p>GLSL\uc740 \ud604\uc7ac\uc758 \uc0c9\uc0c1\uac12\uc744 \uac00\uc9c0\uace0 \uc788\ub294 Attribute \ubcc0\uc218\uac00 \uc788\ub2e4. \uc774 \uc13c\uc158\uc5d0\uc11c\ub294, \ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ub2e4 \ud230 \uc250\uc774\ub529 \ud6a8\uacfc\ub97c \uc801\uc6a9\ud560 \uac83\uc774\ub2e4. \uc774\ub807\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294, \ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ub2e4\uc5d0 \ub300\ud55c \ubc95\uc120\ubca1\ud130\uac12\uc744 \uc77d\uc5b4\uc57c \ud55c\ub2e4. \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\ub294 Varying \ubcc0\uc218\uc5d0 \ubc95\uc120\ubca1\ud130\ub97c \uae30\ub85d\ud560 \ud544\uc694\ub9cc \uc788\ub294 \ubc18\uba74, \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\ub294 \ubcf4\uac04\ub41c \ubc95\uc120\ubca1\ud130\ub97c \uc77d\uc5b4\uc57c\ud55c\ub2e4.<\/p>\n<p>\ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \uc989\uc2dc \ube5b\uc758 \ubc1d\uae30\uac12\uc774 \uacc4\uc0b0\ub418\ubbc0\ub85c \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc758 \ucf54\ub4dc\ub294 \uac04\ub2e8\ud574\uc9c4\ub2e4. lightDir\uc740 Uniform \ubcc0\uc218\uc778\ub370, \uc774 \ubcc0\uc218\ub294 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\ub85c \uc62e\uaca8\uc9c0\uac8c\ub418\uba70, \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc5d0\uc11c\ub294 \ub354 \uc774\uc0c1 \uc0ac\uc6a9\ub418\uc9c0 \uc54a\ub294\ub2e4.<\/p>\n<pre><code class=\"html\">varying vec3 normal;\r\n\r\nvoid main()\r\n{\r\n    normal = gl_Normal;\r\n    gl_Position = ftransform();\r\n}<\/code><\/pre>\n<p>\ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c, Uniform \ubcc0\uc218\uc778 lightDir\ub97c \uc120\uc5b8\ud560 \ud544\uc694\uac00 \uc788\ub294\ub370, \uc774 \ubcc0\uc218\uac00 \ube5b\uc758 \ubc1d\uae30\uac12\uc744 \uacc4\uc0b0\ud558\ub294\ub370 \uc0ac\uc6a9\ub41c\ub2e4. \ubcf4\uac04\ub41c \ubc95\uc120\ubca1\ud130\ub97c \ubc1b\uae30 \uc704\ud574 Varying \ubcc0\uc218\ub3c4 \uc815\uc758\ud574\uc57c\ud55c\ub2e4. \uc544\ub798 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc758 \ucf54\ub4dc \ub0b4\uc6a9\uc774\ub2e4.<\/p>\n<pre><code class=\"html\">uniform vec3 lightDir;\r\nvarying vec3 normal;\r\n\r\nvoid main()\r\n{\r\n    float intensity;\r\n    vec4 color;\r\n\r\n    intensity = dot(lightDir, normal);\r\n\r\n    if(intensity > 0.95)\r\n        color = vec4(1.0, 0.5, 0.5, 1.0);\r\n    if(intensity > 0.5)\r\n        color = vec4(0.6, 0.3, 0.3, 1.0);\r\n    if(intensity > 0,25)\r\n        color = vec4(0.4, 0.2, 0.2, 1.0);\r\n    else\r\n        color = vec4(0.2, 0.1, 0.1, 1.0);\r\n\r\n    gl_FragColor = color;\r\n}<\/code><\/pre>\n<p>\uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1403731323.gif\" alt=\"\" width=\"360\" height=\"250\" \/>\uc774\uc804\uc774\ub791 \uacb0\uacfc\uac00 \ub611\uac19\ub124? =_=;; \ubb50\uc5ec&#8230;.?<\/p>\n<p>\uc774\uc804 \uc7a5\uc5d0\uc11c \uc0b4\ud3b4\ubcf8 \uac83\uacfc \uc774\ubc88 \uc7a5\uc758 \uac83\uc758 \ucc28\uc774\uc810\uc744 \uc880\ub354 \uc0b4\ud3b4\ubcf4\uc790. \uccab\ubc88\uc9f8 \uac83\uc740 \ube5b\uc758 \ubc1d\uae30\ub97c \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc5d0\uc11c \uacc4\uc0b0\uc744 \ud588\uace0 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \ubcf4\uac04\ub41c \uac12\uc744 \uc0ac\uc6a9\ud588\ub2e4. \ub450\ubc88\uc9f8 \uac83\uc740 \ub0b4\uc801\uc744 \uacc4\uc0b0\ud55c \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\ub97c \uc704\ud574 \ubc84\ud14d\uc2a4\uc250\uc774\ub354\uc5d0\uc11c \ubc95\uc120\ubca1\ud130\ub97c \ubcf4\uac04\ud588\ub2e4. \ubcf4\uac04\uacfc \ub0b4\uc801 \uc5f0\uc0b0\uc740 \ub458\ub2e4 \uc120\ud615 \uc5f0\uc0b0\uc774\ubbc0\ub85c \ub0b4\uc801\uc5f0\uc0b0\uc744 \uc218\ud589\ud55c \ub2e4\uc74c\uc5d0 \ubcf4\uac04 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\ub098 \ubcf4\uac04 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\uace0 \uc120\ud615 \uc5f0\uc0b0\uc744 \uc218\ud589\ud558\ub098 \uacb0\uacfc\ub294 \ub3d9\uc77c\ud558\ub2e4.<\/p>\n<p>\uadf8\ub7fc \ub3c4\ub370\uccb4 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \ub0b4\uc801\uc744 \uc704\ud55c \ubc95\uc120\ubca1\ud130\uc758 \ubcf4\uac04\uc758 \uc0ac\uc6a9\uc5d0 \ubb50\uac00 \ubb38\uc81c\uac00 \uc788\ub2e4\ub294 \uac83\uc778\uac00!! \ubc95\uc120\ubca1\ud130\uac00 \uc633\ubc14\ub978 \ubc29\ud5a5\uc744 \uac00\uc9c0\uace0 \uc788\uc744\uc9c0\ub77c\ub3c4 \ubc95\uc120\ubca1\ud130\uac00 \uc798\ubabb\uc778\ub370, \uc774\uc720\ub294 \ubc95\uc120\ubca1\ud130\uac00 \uc815\ud655\ud788 \ub2e8\uc704\ubca1\ud130\uc758 \uae38\uc774(1)\uc774 \uc544\ub2c8\uae30 \ub54c\ubb38\uc774\ub2e4.<\/p>\n<p>We know that the direction is right because we assumed that the normals that arrived at the vertex shader were normalized, and interpolating normalized vectors, provides a vector with the correct direction. However the length is wrong in the general case because interpolating normalized normals only yields a unit length vector if the normals being interpolated have the same direction, which is highly unlikely in smooth surfaces. \ubcf4\ub2e4 \uc790\uc138\ud55c \ub0b4\uc6a9\uc740 \uc774\ud6c4\uc5d0 Normalization \uc774\uc288\uc5d0\uc11c \ub2e4\uc2dc \uc0b4\ud3b4\ubcf4\uaca0\ub2e4.<\/p>\n<p>\ubc84\ud14d\uc2a4 \uc250\uc774\ub354\ub85c\ubd80\ud130 \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\ub85c \ube5b\uc758 \ubc1d\uae30\uacc4\uc0b0\uc744 \uc62e\uae34 \uc8fc\uc694 \uc774\uc720\ub294 \ud504\ub808\uadf8\uba3c\ud2b8\uc5d0 \ub300\ud574 \uc801\ub2f9\ud55c \ubc95\uc120\ubca1\ud130\ub97c \uc0ac\uc6a9\ud574 \uacc4\uc0b0\ud558\uae30 \uc704\ud568\uc774\ub2e4. \ubc29\ud5a5\uc740 \uc633\uc9c0\ub9cc \ub2e8\uc704\ubca1\ud130\uac00 \uc544\ub2cc \ubc95\uc120 \ubca1\ud130\ub97c \uac00\uc9c0\uace0 \uc788\ub2e4. \ub2e8\uc704 \ubca1\ud130\uac00 \uc544\ub2cc \ubb38\uc81c\ub97c \ud574\uacb0\ud558\ub824\uba74, \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \ubc95\uc120\ubca1\ud130\ub97c \uc815\uaddc\ud654\ud574\uc8fc\uba74 \ub41c\ub2e4. \ub2e4\uc74c\uc758 \ucf54\ub4dc\uac00 \uc774\ub7f0 \ubb38\uc81c\ub97c \ud574\uacb0\ud55c \uc644\ubcbd\ud55c \ud2a0\uc250\uc774\ub354\uc774\ub2e4.<\/p>\n<pre><code class=\"html\">uniform vec3 lightDir;\r\nvarying vec3 normal;\r\n\t\r\nvoid main()\r\n{\r\n\tfloat intensity;\r\n\tvec4 color;\r\n\r\n\tintensity = dot(lightDir, normalize(normal));\r\n\t\t\r\n\tif (intensity > 0.95)\r\n\t\tcolor = vec4(1.0,0.5,0.5,1.0);\r\n\telse if (intensity > 0.5)\r\n\t\tcolor = vec4(0.6,0.3,0.3,1.0);\r\n\telse if (intensity > 0.25)\r\n\t\tcolor = vec4(0.4,0.2,0.2,1.0);\r\n\telse\r\n\t\tcolor = vec4(0.2,0.1,0.1,1.0);\r\n\t\r\n\tgl_FragColor = color;\r\n}<\/code><\/pre>\n<p>\uc704 \ucf54\ub4dc\uc5d0 \ub300\ud55c \uacb0\uacfc\ub294 \ub2e4\uc74c\uacfc \uac19\ub2e4. \ud6e8\uc52c \uba4b\uc788\uc5b4 \uc84c\ub2f9~ \ud558\uc9c0\ub9cc \uc5ec\uc804\uc774 \uc644\ubcbd\ud558\uc9c0 \uc54a\ub2e4. \uadf8\uac83\uc740 \ubaa8\uc11c\ub9ac \ubd80\ubd84\uc774 \uacc4\ub2e8\ucc98\ub7fc \ub098\ud0c0\ub098\ub294 \ubb38\uc81c\uc778\ub370, \uc774 \ubb38\uc81c\ub294 \uc774 \uc7a5\uc758 \ubc94\uc704\ub97c \ubc97\uc5b4\ub09c\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1350008203.gif\" alt=\"\" width=\"440\" height=\"280\" \/>\ub2e4\uc74c \uc7a5\uc5d0\uc11c\ub294 \uc250\uc774\ub354\ub97c \ud1b5\ud574 \ub2e4\uc591\ud55c \uad11\uc6d0\uc5d0 \ub300\ud574 \uc0b4\ud3b4\ubcf4\uaca0\ub2e4.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GLSL \uc608\uc81c &#8211; \ud230\uc250\uc774\ub529 3(\ucd1d4\uc7a5) \uc6d0\ubb38 : http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?toon2 GLSL\uc740 OpenGL\uc758 \uc0c1\ud0dc\uc758 \uc77c\ubd80\uc5d0 \uc811\uadfc\ud560 \uc218 \uc788\ub2e4. \uc774 \uac15\uc88c\uc5d0\uc11c\ub294 OpenGL \uc5b4\ud50c\ub9ac\ucf00\uc774\uc158\uc5d0\uc11c glColor\ub85c \uc124\uc815\ub41c \uc0c9\uc744 \uc77d\ub294 \ubc29\ubc95\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4\ubcf4\uaca0\ub2e4. GLSL\uc740 \ud604\uc7ac\uc758 \uc0c9\uc0c1\uac12\uc744 \uac00\uc9c0\uace0 \uc788\ub294 Attribute \ubcc0\uc218\uac00 \uc788\ub2e4. \uc774 \uc13c\uc158\uc5d0\uc11c\ub294, \ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ub2e4 \ud230 \uc250\uc774\ub529 \ud6a8\uacfc\ub97c \uc801\uc6a9\ud560 \uac83\uc774\ub2e4. \uc774\ub807\uac8c \ud558\uae30 \uc704\ud574\uc11c\ub294, \ud504\ub808\uadf8\uba3c\ud2b8 \ub9c8\ub2e4\uc5d0 \ub300\ud55c \ubc95\uc120\ubca1\ud130\uac12\uc744 \uc77d\uc5b4\uc57c \ud55c\ub2e4. \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\ub294 Varying &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=497\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;OpenGL Shader &#8211; 22&#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-497","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\/497","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=497"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/497\/revisions"}],"predecessor-version":[{"id":3567,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/497\/revisions\/3567"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=497"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=497"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=497"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}