{"id":539,"date":"2007-10-05T14:58:00","date_gmt":"2007-10-05T14:58:00","guid":{"rendered":"http:\/\/www.gisdeveloper.co.kr\/?p=539"},"modified":"2017-01-29T11:02:57","modified_gmt":"2017-01-29T02:02:57","slug":"opengl-shader-25","status":"publish","type":"post","link":"http:\/\/www.gisdeveloper.co.kr\/?p=539","title":{"rendered":"OpenGL Shader &#8211; 25"},"content":{"rendered":"<div align=\"center\"><strong>GLSL \uc608\uc81c : Lighting(Directional Lights 1) &#8211; 2\/6<\/strong><\/div>\n<p>\uc6d0\ubcf8 : <a href=\"http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogldir1\">http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogldir1<\/a><\/p>\n<p>OpenGL Programming Guide(\uc77c\uba85: Red Book)\ub77c\ub294 \ucc45\uc5d0 The Mathematics of Lights \ucc55\ud130\uc5d0 \ubcf8 \ub0b4\uc6a9\uc5d0 \ub098\uc624\ub294 \uacf5\uc2dd\uc774 \uc788\ub2e4.<\/p>\n<p>\uba3c\uc800 Diffuse \uc6a9\uc5b4\ubd80\ud130 \uc2dc\uc791\ud574\ubcf4\uc790. OpenGL\uc5d0\uc11c Diffuse \ube5b\uc740 \uad00\ucc30\uc790\uc758 \uc704\uce58\uc5d0 \uc0c1\uad00\uc5c6\uc774 \uc77c\uc815\ud55c \ube5b\uc758 \uac15\ub3c4\uc774\ub2e4.Diffuse\ub294 \uc7ac\uc9c8\uc758 Diffuse \ubc18\uc0ac \uacc4\uc218\ubfd0\ub9cc\uc774 \uc544\ub2c8\ub77c \ube5b\uc758 Diffuse \uac15\ub3c4\uc5d0 \ub300\ud574 \ube44\ub840\ud55c\ub2e4. \uac15\ub3c4\ub294 \ube5b\uc758 \ubc29\ud5a5\uacfc \ud45c\uba74\uc758 \ubc95\uc120\ubca1\ud130 \uc0ac\uc774\uc758 \uac01\ub3c4\uc5d0 \ube44\ub840\ud55c\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1043115285.jpg\" alt=\"\" width=\"230\" height=\"212\" \/><br \/>\n\ub2e4\uc74c \uacf5\uc2dd\uc740 OpenGL\uc5d0\uc11c Diffuse\ub97c \uacc4\uc0b0\ud558\ub294\ub370 \uc0ac\uc6a9\ub418\ub294 \uacf5\uc2dd\uc774\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1208439005.gif\" alt=\"\" width=\"218\" height=\"48\" \/><br \/>\n\uc704\uc758 \uc2dd\uc5d0\uc11c, I\ub294 \ubc18\uc0ac\uac15\ub3c4, Ld\ub294 \ube5b\uc758 Diffuse \uc0c9\uc0c1(gl_LightSource[0].diffuse), \uadf8\ub9ac\uace0 Md\ub294 \uc7ac\uc9c8\uc758 Diffuse \uacc4\uc218(gl_FrontMaterial.diffuse)\uc774\ub2e4.<\/p>\n<p>\uc704\uc758 \uc2dd\uc740 Lambertian \ubc18\uc0ac\uc2dd\uc73c\ub85c \uc54c\ub824\uc838\uc788\ub2e4. Lambert\uc758 Cosine \ubc95\uce59\uc740 \ud3c9\uba74\uc5d0 \ub300\ud55c \ud45c\uba74\uc758 Diffuse \ubc1d\uae30\ub294 \uc2dc\uc120\uacfc \ud45c\uba74\uc758 \ubc95\uc120\ubca1\ud130\ub85c \ud615\uc131\ub418\uc5b4\uc9c4 Cosine \uac01\uc5d0 \ube44\ub840\ud568\uc744 \ub098\ud0c0\ub0b8\ub2e4. \uc774 \ubc95\uce59\uc740 200\ub144\uc804\uc758 \uc774\ub860\uc774\ub2e4. (Johann Heinrich Lambert, 1728~1777)<\/p>\n<p>\ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc5d0\uc11c \uc774 \uacf5\uc2dd\uc744 \uad6c\ud604\ud558\uae30 \uc704\ud574\uc11c\ub294 \ube5b\uc758 \uc18d\uc131\uc744 \uc0ac\uc6a9\ud560 \uac83\uc774\uace0, \uc8fc\ub85c \ube5b\uc758 \uc704\uce58\uc640 Diffuse \uac15\ub3c4\uc5d0 \ub300\ud55c \uc18d\uc131\uc774\ub2e4. \ub610\ud55c \uc7ac\uc9c8\uc5d0 \ub300\ud55c Diffuse \uc124\uc815 \uc18d\uc131\ub3c4 \uc774\uc6a9\ud560 \uac83\uc774\ub2e4. \ub530\ub77c\uc11c \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc5d0\uc11c\ub294 OpenGL\uc5d0\uc11c \ud588\ub358 \uac83\ucc98\ub7fc \ube5b\uc744 \uc124\uc815\ud558\uba74\ub41c\ub2e4. \uadf8\ub7ec\ub098 \uc8fc\uc758\ud560 \uac83\uc740 \uace0\uc815\uae30\ub2a5\uc744 \uc0ac\uc6a9\ud558\uc9c0 \uc54a\uc744 \uac83\uc774\uae30\ub54c\ubb38\uc5d0, \ube5b\uc744 \ud65c\uc131\ud654 \uc2dc\ud0ac \ud544\uc694\ub294 \uc5c6\ub2e4.<\/p>\n<p>Cosine\uc744 \uacc4\uc0b0\ud560 \ud544\uc694\uac00 \uc788\uc73c\ubbc0\ub85c, \uba3c\uc800 \uc6b0\ub9ac\ub294 \ubc95\uc120\ubca1\ud130\uc640 \ube5b\uc758 \ubc29\ud5a5 \ubca1\ud130(gl_LightSource[0].position)\ub97c \uc815\uaddc\ud654\ud560 \ud544\uc694\uac00 \uc788\ub2e4. \uadf8\ub9ac\uace0 Cosine \uac12\uc744 \uc5bb\uae30 \uc704\ud574\uc11c \ub0b4\uc801\uc744 \uc0ac\uc6a9\ud560 \uac83\uc774\ub2e4. Directional Lights\uc5d0 \ub300\ud574\uc11c\ub294, OpenGL\uc774 \ube5b\uc758 \ubc29\ud5a5\uc744 \uc704\uc758 \uadf8\ub9bc\uc5d0\uc11c \ubcf4\ub294 \uac83\ucc98\ub7fc \ubc18\ub300\ub85c \ud558\uace0 \uc788\uc74c\uc744 \uc54c\uc218 \uc788\ub2e4.<\/p>\n<p>OpenGL\uc740 \ube5b\uc758 \ubc29\ud5a5\uc744 Eye \uacf5\uac04\uc88c\ud45c\uacc4\ub85c \uc800\uc7a5\ud558\uace0 \uc788\ub2e4; \uadf8\ub7ec\ubbc0\ub85c \uc6b0\ub9ac\ub294 \ub0b4\uc801\uc744 \uacc4\uc0b0\ud558\uae30 \uc704\ud574\uc11c \ubc95\uc120\ubca1\ud130\ub97c Eye \uacf5\uac04\uc88c\ud45c\uacc4\ub85c \ubcc0\ud658\ud574\uc57c\ud55c\ub2e4. \ubc95\uc120\ubca1\ud130\ub97c Eye \uacf5\uac04\uc88c\ud45c\uacc4\ub85c \ubcc0\ud658\ud558\uae30 \uc704\ud574\uc11c\ub294, \ubbf8\ub9ac \uc815\uc758\ub41c Uniform \ubcc0\uc218\uc778 mat3 gl_NormalMatrix\ub97c \uc0ac\uc6a9\ud574\uc57c\ud560 \uac83\uc774\ub2e4. \uc774 \ud589\ub82c\uc740 \ubaa8\ub378\ubdf0\ud589\ub82c\ub85c\ubd80\ud130 3&#215;3 \uc88c\uc0c1\ub2e8\ub9e4\ud2b8\ub9ad\uc2a4\uc758 \uc5ed\uc804\uce58\ud589\ub82c\uc774\ub2e4.<\/p>\n<p>\ub2e4\uc74c \ubc84\ud14d\uc2a4 \uc250\uc774\ub354\ub294 \uc704\uc5d0\uc11c \uc5b8\uae09\ud55c \uac83\ub4e4\uc744 \uc704\ud55c \ubc84\ud14d\uc2a4 \uc250\uc774\ub354 \ucf54\ub4dc\uc774\ub2e4.<\/p>\n<pre><code class=\"html\">void main() {\r\n    vec3 normal, lightDir;\r\n    vec4 diffuse;\r\n    float NdotL;\r\n\r\n    \/* \uba3c\uc800 \ubc95\uc120\ubca1\ud130\ub97c Eye \uacf5\uac04\uc88c\ud45c\uacc4\ub85c \ubcc0\ud658\ud558\uace0 \uc815\uaddc\ud654\ud55c\ub2e4 *\/\r\n    normal = normalize(gl_NormalMatrix * gl_Normal);\r\n\t\t\r\n    \/* \uc774\uc81c \ube5b\uc758 \ubc29\ud5a5 \ubca1\ud130\ub97c \uc815\uaddc\ud654\ud55c\ub2e4. OpenGL\uc758 \uc18c\ud399\uc744 \ubcf4\uba74, \ube5b\uc740 Eye \uacf5\uac04\uc88c\ud45c\uacc4\uc774\ub2e4.\r\n    \ub610\ud55c \uc6b0\ub9ac\uac00 \uc9c0\uae08 Directional Light\uc5d0 \ub300\ud574 \uc774\uc57c\uae30\ud558\uace0 \uc788\uc73c\ubbc0\ub85c, \ube5b\uc758 \uc704\uce58 \ud544\ub4dc\ub294\r\n     \uc2e4\uc81c \ube5b\uc758 \ubc29\ud5a5\uc774\ub2e4. *\/\r\n    lightDir = normalize(vec3(gl_LightSource[0].position));\r\n\r\n    \/* \ubc95\uc120\ubca1\ud130\uc640 \ube5b\uc758 \ubc29\ud5a5 \uc0ac\uc774\uc758 \uac01\ub3c4\uc5d0 \ub300\ud55c Cos \uac12\uc744 \uacc4\uc0b0\ud55c\ub2e4. \ube5b\uc740 Directional\uc774\ubbc0\ub85c\r\n     \ubaa8\ub4e0 \uc88c\ud45c\uc5d0 \ub300\ud574\uc11c \ube5b\uc758 \ubc29\ud5a5\uc740 \uc77c\uc815\ud558\ub2e4. \uc774 \ub450\ubca1\ud130\ub294 \uc815\uaddc\ud654\ub418\uc5c8\uc73c\ubbc0\ub85c \ub0b4\uc801\uc744 \uad6c\ud558\uba74\ub41c\ub2e4.\r\n    \uacb0\uacfc\ub294 0~1 \ubc94\uc704 \uc0ac\uc774\ub85c \ub9de\ucd98\ub2e4. *\/\r\n    NdotL = max(dot(normal, lightDir), 0.0);\r\n\r\n    \/* Diffuse\ub97c \uacc4\uc0b0\ud55c\ub2e4. *\/\r\n    diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse;\r\n\t\t\r\n    gl_FrontColor =  NdotL * diffuse;\r\n\t\t\r\n    gl_Position = ftransform();\r\n}<\/code><\/pre>\n<p>\uc774\uc81c, \ud504\ub808\uadf8\uba3c\ud2b8 \uc250\uc774\ub354\uc5d0\uc11c \ud574\uc57c\ud560 \uac83\uc774 \ub0a8\uc558\ub294\ub370, gl_Color Varying \ubcc0\uc218\ub97c \uc0ac\uc6a9\ud574\uc11c \ud504\ub808\uadf8\uba3c\ud2b8\uc758 \uc0c9\uc0c1\uc744 \uc124\uc815\ud574\ubcf4\uc790.<\/p>\n<pre><code class=\"html\">void main()\r\n{\r\n    gl_FragColor = gl_Color;\r\n}<\/code><\/pre>\n<p>\ub2e4\uc74c \uc774\ubbf8\uc9c0\uac00 \uc8fc\uc804\uc790 \ubaa8\ub378\uc5d0 \ub300\ud574 \uc801\uc6a9\ub41c \uacb0\uacfc\uc774\ub2e4. \uc8fc\uc804\uc790\uc758 \ubc11\ubc14\ub2e6\uc744 \ubcf4\uba74 \ub9e4\uc6b0 \uc5b4\ub461\uac8c \ud45c\ud604\uc774 \ub418\uc5c8\uc74c\uc744 \uc8fc\ubaa9\ud558\uae30 \ubc14\ub780\ub2e4. \uc774\uac83\uc740 OpenGL\uc5d0\uc11c Ambient \ube5b\uc744 \uc544\uc9c1 \uc801\uc6a9\ud558\uc9c0 \uc54a\uc558\uae30 \ub54c\ubb38\uc774\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1049079756.gif\" alt=\"\" width=\"308\" height=\"192\" \/>Ambient \ube5b\uc744 \ud1b5\ud569\uc2dc\ud0a4\ub294 \uac83\uc740 \uc5b4\ub835\uc9c0 \uc54a\ub2e4. \uc544\ub798\uc758 \uc2dd\uc740 Ambient \ube5b\uc5d0 \ub300\ud55c \uacf5\uc2dd\uc774\ub2e4.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1203873424.gif\" alt=\"\" width=\"234\" height=\"35\" \/><br \/>\n\ubc84\ud14d\uc2a4 \uc250\uc774\ub354\uc5d0\uc11c Ambient\ub97c \uacc4\uc0b0\ud558\uae30 \uc704\ud574\uc11c \uba87\uac00\uc9c0 \ucf54\ub4dc\ub97c \ucd94\uac00\ud560 \ud544\uc694\uac00 \uc788\ub2e4.<\/p>\n<pre><code class=\"html\">void main()\r\n{\r\n    vec3 normal, lightDir;\r\n    vec4 diffuse, ambient, globalAmbient;\r\n    float NdotL;\r\n\t\t\r\n    normal = normalize(gl_NormalMatrix * gl_Normal);\r\n    lightDir = normalize(vec3(gl_LightSource[0].position));\r\n    NdotL = max(dot(normal, lightDir), 0.0);\r\n    diffuse = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse;\r\n\t\t\r\n    \/* Compute the ambient and globalAmbient terms *\/\r\n    ambient = gl_FrontMaterial.ambient * gl_LightSource[0].ambient;\r\n    globalAmbient = gl_LightModel.ambient * gl_FrontMaterial.ambient;\r\n\t\t\r\n    gl_FrontColor =  NdotL * diffuse + globalAmbient + ambient;\r\n\t\t\r\n    gl_Position = ftransform();\r\n}<\/code><\/pre>\n<p>\ub2e4\uc74c \uc774\ubbf8\uc9c0\uac00 \ucd5c\uc885 \uacb0\uacfc\uc774\ub2e4. Ambient \ube5b\uc744 \ucd94\uac00\ud558\uc790 \uc0c9\uc0c1\uc744 \uc53b\uc5b4\ub0b4\ub294 \ub4ef(\ubc1d\uac8c\ud558\ub2e4)\ud558\uace0 \uc788\ub2e4. \uacb0\uad6d \ud6a8\uacfc\uac00 \ubcc4\ub85c\ub77c\ub294 \uc598\uae30\uc774\ub2e4.<br \/>\n<img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"http:\/\/www.gisdeveloper.co.kr\/wp-content\/uploads\/1\/1255358647.gif\" alt=\"\" width=\"290\" height=\"192\" \/>\uc774\uc81c \ub2e4\uc74c \uc0c9\uc120\uc5d0\uc11c Specular \uc694\uc18c\uc5d0 \ub300\ud574\uc11c \uc0b4\ud3b4\ubcf4\uaca0\ub2e4.<\/p>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>GLSL \uc608\uc81c : Lighting(Directional Lights 1) &#8211; 2\/6 \uc6d0\ubcf8 : http:\/\/www.lighthouse3d.com\/opengl\/glsl\/index.php?ogldir1 OpenGL Programming Guide(\uc77c\uba85: Red Book)\ub77c\ub294 \ucc45\uc5d0 The Mathematics of Lights \ucc55\ud130\uc5d0 \ubcf8 \ub0b4\uc6a9\uc5d0 \ub098\uc624\ub294 \uacf5\uc2dd\uc774 \uc788\ub2e4. \uba3c\uc800 Diffuse \uc6a9\uc5b4\ubd80\ud130 \uc2dc\uc791\ud574\ubcf4\uc790. OpenGL\uc5d0\uc11c Diffuse \ube5b\uc740 \uad00\ucc30\uc790\uc758 \uc704\uce58\uc5d0 \uc0c1\uad00\uc5c6\uc774 \uc77c\uc815\ud55c \ube5b\uc758 \uac15\ub3c4\uc774\ub2e4.Diffuse\ub294 \uc7ac\uc9c8\uc758 Diffuse \ubc18\uc0ac \uacc4\uc218\ubfd0\ub9cc\uc774 \uc544\ub2c8\ub77c \ube5b\uc758 Diffuse \uac15\ub3c4\uc5d0 \ub300\ud574 \ube44\ub840\ud55c\ub2e4. \uac15\ub3c4\ub294 \ube5b\uc758 \ubc29\ud5a5\uacfc \ud45c\uba74\uc758 \ubc95\uc120\ubca1\ud130 &hellip; <\/p>\n<p class=\"link-more\"><a href=\"http:\/\/www.gisdeveloper.co.kr\/?p=539\" class=\"more-link\">\ub354 \ubcf4\uae30<span class=\"screen-reader-text\"> &#8220;OpenGL Shader &#8211; 25&#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-539","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\/539","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=539"}],"version-history":[{"count":1,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/539\/revisions"}],"predecessor-version":[{"id":3561,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=\/wp\/v2\/posts\/539\/revisions\/3561"}],"wp:attachment":[{"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=539"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=539"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.gisdeveloper.co.kr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=539"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}