54.htm 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. <!--
  2. demo.design 3D programming FAQ
  3. Idea, texts, screenshots:
  4. Andrew A. Aksyonoff,
  5. shodan@chat.ru
  6. Web-design, illustrations:
  7. Andrey Samoilov,
  8. asy@sense.simbirsk.su
  9. -->
  10. <html>
  11. <head>
  12. <title>demo.design 3D programming FAQ. Освещение. Освещение по Гуро.</title>
  13. <link rel=stylesheet href="../style.css" type="text/css">
  14. </head>
  15. <script language="javascript">
  16. <!--//
  17. browser = navigator.appName;
  18. version = parseFloat(navigator.appVersion);
  19. if (browser == "Netscape" && version >= 3.0) { jsenabled = 1; } else
  20. if (browser == "Microsoft Internet Explorer" && version >= 3.0) { jsenabled = 1; } else { jsenabled = 0; }
  21. function swap(img,ref) { if (jsenabled) {document.images[img].src = ref;} }
  22. function loadtocache(img,ref) { cache[img] = new Image(); cache[img].src = ref; }
  23. if (jsenabled) {
  24. cache = new Array();
  25. loadtocache(0,"../img/xdl.gif");
  26. loadtocache(1,"../img/xfaq.gif");
  27. loadtocache(2,"../img/xlinks.gif");
  28. loadtocache(3,"../img/xauthor.gif");
  29. loadtocache(4,"../img/xe.gif");
  30. loadtocache(5,"../img/xprev.gif");
  31. loadtocache(6,"../img/xnext.gif");}
  32. //-->
  33. </script>
  34. <body bgcolor=white><center>
  35. <!-- Title -->
  36. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  37. <img src="../img/t.gif" width=500 height=1 alt=""><br>
  38. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  39. <img src="../img/t.gif" width=500 height=2 alt=""><br>
  40. <table width=500 cellpadding=0 cellspacing=0 border=0>
  41. <td><img src="../img/t.gif" width=5 height=1 alt=""><a href="../main.htm" onmouseover="swap('logo','../img/xe.gif');" onmouseout="swap('logo','../img/e.gif');"><img src="../img/e.gif" name=logo width=60 height=50 hspace=10 border=0 alt=" в самое начало "></a></td>
  42. <td><p class=pagetitle><img src="../img/t.gif" width=265 height=1 alt=""><br>demo.design<br>3D programming FAQ</td>
  43. <td align=center><p class=navy><a href="../download.htm" onmouseover="swap('dl','../img/xdl.gif');" onmouseout="swap('dl','../img/dl.gif');"><img src="../img/dl.gif" name=dl width=40 height=40 border=0 hspace=5 alt=" download "></a><br>download</td>
  44. <td align=center><p class=navy><a href="../links.htm" onmouseover="swap('links','../img/xlinks.gif');" onmouseout="swap('links','../img/links.gif');"><img src="../img/links.gif" name=links width=40 height=40 border=0 hspace=5 alt=" коллекция линков "></a><br>links</td>
  45. <td align=center><p class=navy><a href="../author.htm" onmouseover="swap('author','../img/xauthor.gif');" onmouseout="swap('author','../img/author.gif');"><img src="../img/author.gif" name=author width=40 height=40 border=0 hspace=5 alt=" автора! "></a><br>author</td>
  46. </table>
  47. <img src="../img/t.gif" width=500 height=4 alt=""><br><img src="../img/b.gif" width=500 height=1 alt=""><br>
  48. <!-- Head -->
  49. <table width=500 cellpadding=0 cellspacing=10 border=0><td><div align=justify>
  50. <p class=title>
  51. <img src="../img/b5.gif" width=70 height=70 align=left hspace=0 alt="">
  52. <img src="../img/t.gif" width=5 height=70 align=left hspace=0 alt="">
  53. ОСВЕЩЕНИЕ<br>5.4. Освещение по Гуро
  54. <!-- Article -->
  55. <p>Здесь делаются такие предположения:
  56. <ul>
  57. <li>Ks = 0 (то есть грань не отражает свет, а только рассеивает)
  58. <li>освещенность меняется по грани линейно
  59. </ul>
  60. <p>Ну, а раз освещенность меняется линейно - так же, как и координаты текстуры
  61. u, v - можно использовать точно такую же процедуру, как для старого доброго
  62. текстурирования, только вместо двух координат текстуры u, v нам надо будет
  63. интерполировать одну величину - освещенность. В вершинах она считается по
  64. той же самой формуле (с учетом Ks = 0, конечно),
  65. <p class=expression>intensity = ambient + amp * cos(N, L).<br>
  66. <p>Здесь за N в вершине берется как раз нормаль к объекту в вершине (vertex
  67. normal), посчитанная так, как описано в <a href="52.htm">5.2</a>.
  68. <p>То есть, для написания процедуры освещения по Гуро достаточно написать три
  69. строчки расчета освещенности (обозначать ее будем c) в вершинах грани по
  70. приведенной здесь формуле и заменить в своей процедуре текстурирования u на
  71. c, выкинув при этом v (оно нам не нужно, нас интересует только c). Чтобы
  72. добавить освещение по Гуро в текстурирование, надо, соответственно, добавить
  73. полностью скопированный с расчета u расчет c. Что делать с полученным по
  74. цвету найденного через (u, v) в текстуре пиксела и освещенности с, описано в
  75. соответствующем пункте.
  76. <p>Заметим, что освещение по Гуро - это не линейная интерполяция освещенности
  77. по изображению грани на экране, как это обычно принято и понимать и делать.
  78. Освещенность меняется линейно по трехмерной грани, а вовсе не по ее проекции.
  79. То есть, вообще говоря, здесь мы тоже должны учитывать перспективу. Правда,
  80. линии одинаковой освещенности все равно будут прямыми, но выглядеть картинка,
  81. освещенная по Гуро с учетом перспективы, будет все же покорректнее.
  82. </div>
  83. </td></table>
  84. <!-- Bottom Navigation -->
  85. <img src="../img/b.gif" width=500 height=1 alt=""><br><img src="../img/t.gif" width=500 height=2 alt=""><br>
  86. <table width=500 cellpadding=0 cellspacing=0 border=0>
  87. <td><img src="../img/t.gif" width=5 height=1 alt=""><a href="../main.htm" onmouseover="swap('logo2','../img/xe.gif');" onmouseout="swap('logo2','../img/e.gif');"><img src="../img/e.gif" name=logo2 width=60 height=50 hspace=10 border=0 alt=" в самое начало "></a></td>
  88. <td><p class=pagetitle><img src="../img/t.gif" width=265 height=1 alt=""><br>demo.design<br>3D programming FAQ</td>
  89. <td align=center><p class=navy><a href="53.htm" onmouseover="swap('prev','../img/xprev.gif');" onmouseout="swap('prev','../img/prev.gif');"><img src="../img/prev.gif" name=prev width=40 height=40 border=0 hspace=5 alt=" предыдущая статья "></a><br>previous</td>
  90. <td align=center><p class=navy><a href="../content.htm" onmouseover="swap('faq','../img/xfaq.gif');" onmouseout="swap('faq','../img/faq.gif');"><img src="../img/faq.gif" name=faq width=40 height=40 border=0 hspace=5 alt=" содержание "></a><br>content</td>
  91. <td align=center><p class=navy><a href="55.htm" onmouseover="swap('next','../img/xnext.gif');" onmouseout="swap('next','../img/next.gif');"><img src="../img/next.gif" name=next width=40 height=40 border=0 hspace=5 alt=" следующая статья "></a><br>next</td>
  92. </table>
  93. <img src="../img/t.gif" width=500 height=4 alt=""><br>
  94. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  95. <img src="../img/t.gif" width=500 height=1 alt=""><br>
  96. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  97. </center></body>
  98. </html>