52.htm 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  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.2. Ðàñ÷åò íîðìàëè ê îáúåêòó
  54. <!-- Article -->
  55. <p>Âî âñåõ ôîðìóëàõ äëÿ îñâåùåííîñòè ó íàñ òàê èëè èíà÷å áóäåò ôèãóðèðîâàòü
  56. âåêòîð N - íîðìàëü ê îáúåêòó â òî÷êå P. Ñðàçó âîçíèêàåò âîïðîñ, à êàê æå
  57. ýòîò âåêòîð ñ÷èòàòü.
  58. <p>Îáû÷íî ïðèäåðæèâàþòñÿ òàêîé ëîãèêè. Ìîäåëü ó íàñ ñîñòîèò èç ïëîñêèõ ãðàíåé,
  59. íî ýòà ñåòêà ïëîñêèõ ãðàíåé ïðèáëèæàåò êàêîé-òî èñêðèâëåííûé îáúåêò. Íîðìàëü
  60. ê ýòîìó èñêðèâëåííîìó îáúåêòó ìåíÿåòñÿ â êàæäîé òî÷êå, à äëÿ ïëîñêèõ ãðàíåé
  61. îíà ïîñòîÿííà äëÿ âñåõ òî÷åê ãðàíè, è ðåçêî ìåíÿåòñÿ ïðè ïåðåõîäå íà äðóãóþ
  62. ãðàíü. Ïîýòîìó íîðìàëü ê îáúåêòó îáû÷íî ïðèáëèæàþò ñëåäóþùèì îáðàçîì: ñ÷èòàþò
  63. íîðìàëè â âåðøèíàõ, à íîðìàëü â êàêîé-òî òî÷êå ãðàíè ëèíåéíî èíòåðïîëèðóþò
  64. ìåæäó âåðøèíàìè; òî åñòü ëèíåéíî èíòåðïîëèðóþò ïî ãðàíè âñå òðè êîîðäèíàòû
  65. íîðìàëè.
  66. <p>Íîðìàëü â âåðøèíå ðàññ÷èòûâàþòñÿ êàê ñóììà ïðèâåäåííûõ ê äëèíå 1 íîðìàëåé êî
  67. âñåì ãðàíÿì, ê êîòîðûì ïðèíàäëåæèò ýòà âåðøèíà. Òî åñòü. Ñíà÷àëà ñ÷èòàåì
  68. íîðìàëè êî âñåì ãðàíÿì è ïðèâîäèì èõ ê äëèíå 1. Äàëåå, äëÿ êàæäîé âåðøèíû
  69. íàäî ïåðåáðàòü âñå ãðàíè, è åñëè î÷åðåäíàÿ ãðàíü ñîäåðæèò ýòó âåðøèíó, òî
  70. ê íîðìàëè â âåðøèíå ïðèáàâëÿåòñÿ íîðìàëü ê ýòîé ãðàíè. Ïåðâîíà÷àëüíî âñå
  71. íîðìàëè ê âåðøèíàì ïîëàãàþòñÿ ðàâíûìè íóëþ. Äëÿ áîëüøèõ ìîäåëåé ýòîò ïðîöåññ
  72. ìîæåò áûòü äîâîëüíî äîëãèì, íî äîñòàòî÷íî ïðîâåñòè åãî çàðàíåå îäèí ðàç è
  73. ñîõðàíèòü âñå ïîñ÷èòàííûå íîðìàëè ê âåðøèíàì.
  74. <p>Äëÿ âÿùåé ïîíÿòíîñòè ïðèâåäó êóñîê êîäà:
  75. <pre class=source>
  76. // ...
  77. for (i = 0; i < numberOfVertics; i++) {
  78. vertexNormal[i].x = 0;
  79. vertexNormal[i].y = 0;
  80. vertexNormal[i].z = 0;
  81. }
  82. for (i = 0; i < numberOfVertics; i++) {
  83. for (j = 0; j < numberOfFaces; j++) {
  84. if (face[j].vertex0 == i ||
  85. face[j].vertex1 == i ||
  86. face[j].vertex2 == i)
  87. {
  88. vertexNormal[i].x += faceNormal[j].x;
  89. vertexNormal[i].y += faceNormal[j].y;
  90. vertexNormal[i].z += faceNormal[j].z;
  91. }
  92. }
  93. }
  94. // ...
  95. </pre>
  96. <p>Íî ýòî ìåòîä äàæå ñëèøêîì ëîáîâîé, è ïîýòîìó ìåäëåííûé. Ìîæíî ñäåëàòü âñå
  97. ïðîùå è áûñòðåå: ïåðåáèðàåì âñå ãðàíè, è ê íîðìàëÿì âñåõ ïðèíàäëåæàùèõ ãðàíè
  98. âåðøèí äîáàâëÿåì íîðìàëü ãðàíè. Ïîñëå ýòîãî ïðèâîäèì âñå íîðìàëè ê äëèíå 1,
  99. ïðè÷åì ýòà ôàçà äàæå íå îáÿçàòåëüíà, à ëèøü óäîáíà äëÿ äàëüíåéøèõ ðàñ÷åòîâ.
  100. Ñîîòâåòñòâóþùèé êóñî÷åê êîäà:
  101. <pre class=source>
  102. // ...
  103. for (i = 0; i < numberOfVertics; i++) {
  104. vertexNormal[i].x = 0;
  105. vertexNormal[i].y = 0;
  106. vertexNormal[i].z = 0;
  107. }
  108. for (i = 0; i < numberOfFaces; i++) {
  109. vertexNormal[face[i].vertex0].x += faceNormal[j].x;
  110. vertexNormal[face[i].vertex1].y += faceNormal[j].y;
  111. vertexNormal[face[i].vertex2].z += faceNormal[j].z;
  112. }
  113. // ...
  114. </pre>
  115. </div>
  116. </td></table>
  117. <!-- Bottom Navigation -->
  118. <img src="../img/b.gif" width=500 height=1 alt=""><br><img src="../img/t.gif" width=500 height=2 alt=""><br>
  119. <table width=500 cellpadding=0 cellspacing=0 border=0>
  120. <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>
  121. <td><p class=pagetitle><img src="../img/t.gif" width=265 height=1 alt=""><br>demo.design<br>3D programming FAQ</td>
  122. <td align=center><p class=navy><a href="51.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>
  123. <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>
  124. <td align=center><p class=navy><a href="53.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>
  125. </table>
  126. <img src="../img/t.gif" width=500 height=4 alt=""><br>
  127. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  128. <img src="../img/t.gif" width=500 height=1 alt=""><br>
  129. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  130. </center></body>
  131. </html>