44.htm 8.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  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/b4.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>4.4. Ïàðàáîëè÷åñêîå
  54. <!-- Article -->
  55. <p>Ýòîò ìåòîä îñíîâàí íà ïðèáëèæåíèè u, v êâàäðàòè÷íûìè ôóíêöèÿìè - ïàðàáîëàìè,
  56. òî åñòü. Äëÿ êàæäîé ñòðîêè ñòðîèòñÿ ïðèáëèæàþùèå u, v êâàäðàòè÷íûå ôóíêöèè,
  57. äàëüøå ñ èõ ïîìîùüþ îíè èíòåðïîëèðóþòñÿ ïî ñòðîêå. Äëÿ ýòîãî íàì ïîíàäîáÿòñÿ
  58. òî÷íûå çíà÷åíèÿ u, v â òðåõ òî÷êàõ - íà÷àëå, ñåðåäèíå è êîíöå ñòðîêè. Èõ
  59. ñ÷èòàåì òî÷íî òàê æå, êàê â 4.3.
  60. <p>Èòàê, ïóñòü ó íàñ åñòü òî÷íûå çíà÷åíèÿ u â íà÷àëå, ñåðåäèíå è êîíöå ñòðîêè,
  61. òî åñòü íà ðàññòîÿíèè 0, length/2 è length ïèêñåëîâ îò íà÷àëà ýòîé ñòðîêè,
  62. îáîçíà÷èì èõ êàê ua, ub, è uc ñîîòâåòñòâåííî. Ìû ïûòàåìñÿ ïðèáëèçèòü u
  63. êâàäðàòè÷íîé ôóíêöèåé, òî åñòü ïîëàãàåì, ÷òî
  64. <p class=expression>u = A*x*x + B*x + C,<br>
  65. <p>ãäå x - ðàññòîÿíèå îò òåêóùåé òî÷êè äî íà÷àëà ñòðîêè. Òîãäà, ïîäñòàâèâ â
  66. ôîðìóëó ua, ub, uc è ñîîòâåòñòâóþùèå èì x, ïîëó÷àåì:
  67. <p class=expression>ua = C,<br>
  68. ub = A*(length*length)/4 + B*length/2 + C,<br>
  69. uc = A*(length*length) + B*length + C.<br>
  70. <p>Ò.î. C = ua, à äëÿ A è B èìååì ñèñòåìó óðàâíåíèé:
  71. <p class=expression>A*(length*length)/4 + B*length/2 = ub - ua,<br>
  72. A*(length*length) + B*length = uc - ua.<br>
  73. <p>Óìíîæèì ïåðâîå óðàâíåíèå íà ÷åòûðå, âû÷òåì èç íåãî âòîðîå:
  74. <p class=expression>4*A*(length*length)/4 + 4*B*length/2 -
  75. A*(length*length - B*length =<br> 4*(ub - ua) - (uc - ua),<br><br>
  76. B*length = 4*(ub - ua) - (uc - ua),<br>
  77. B = (4*(ub - ua) - (uc - ua)) / length.<br>
  78. <p>Óìíîæèì ïåðâîå óðàâíåíèå íà äâà, âû÷òåì åãî èç âòîðîãî:
  79. <p class=expression>A*(length*length) + B*length -
  80. 2*A*(length*length)/4 - 2*B*length/2 =<br> (uc - ua) - 2*(ub - ua),<br><br>
  81. A*(length*length)/2 = (uc - ua) - 2*(ub - ua),<br>
  82. A = (2*(uc - ua) - 4*(ub - ua)) / (length*length).<br>
  83. <p>Ïîëó÷èëè ôîðìóëû äëÿ A, B, C. Íàéäåì òåïåðü du è ddu. Äëÿ òåêóùåé òî÷êè x
  84. èìååì:
  85. <p class=expression>du(x) = u(x+1) - u(x),<br>
  86. du = (A*(x+1)*(x+1)+B*(x+1)+C) - (A*x*x+B*x+C) = A*(2*x+1) + B,<br>
  87. <br>
  88. ddu(x) = du(x+1) - du(x),<br>
  89. ddu = (A*(2*(x+1)+1)+B) - (A*(2*x+1)+B) = 2*A.<br>
  90. <p>Ò.î., íà÷àëüíûå çíà÷åíèÿ u, du, ddu áóäóò ðàâíû
  91. <p class=expression>u = C,<br>
  92. du = A + B,<br>
  93. ddu = 2*A.<br>
  94. <p>À ïî èçâåñòíûì íà÷àëüíûì çíà÷åíèÿì u, du, ddu ïîñëåäîâàòåëüíî âû÷èñëÿåì
  95. çíà÷åíèÿ u â ëþáîé òî÷êå:
  96. <p class=expression>u(0), du(0), ddu - èçâåñòíû<br>
  97. u(1) = u(0) + du(0), du(1) = du(0) + ddu<br>
  98. u(2) = u(1) + du(1), du(2) = du(1) + ddu<br>
  99. u(3) = u(2) + du(2), du(3) = du(2) + ddu<br>
  100. ...<br>
  101. <p>Äëÿ v âñå äåëàåòñÿ ïîëíîñòüþ àíàëîãè÷íî.
  102. <p>Òàêèì îáðàçîì, ðèñîâàíèå ñòðîêè áóäåò âûãëÿäåòü ïðèìåðíî òàê:
  103. <pre class=source>
  104. // ...
  105. // ñ÷èòàåì u, v äëÿ íà÷àëà, ñåðåäèíû è êîíöà ñòðîêè
  106. ua = uz_start / z1_start;
  107. va = vz_start / z1_start;
  108. ub = (uz_start + uz_end) / (z1_start + z1_end);
  109. vb = (vz_start + vz_end) / (z1_start + z1_end);
  110. uc = uz_end / z1_end;
  111. vc = vz_end / z1_end;
  112. // ñ÷èòàåì íà÷àëüíîå du è ddu
  113. pa = 2 * ((uc - ua) - 2 * (ub - ua)) / (length * length);
  114. pb = (4 * (ub - ua) - (uc - ua)) / length;
  115. pc = ua;
  116. u = pc;
  117. du = pa + pb;
  118. ddu = 2 * pa;
  119. // ñ÷èòàåì íà÷àëüíîå dv è ddv
  120. pa = 2 * ((vc - va) - 2 * (vb - va)) / (length * length);
  121. pb = (4 * (vb - va) - (vc - va)) / length;
  122. pc = v_a;
  123. v = pc;
  124. dv = pa + pb;
  125. ddv = 2 * pa;
  126. // ðèñóåì êóñîê
  127. while (length--) {
  128. putpixel(current_sx, current_sy, texture[v][u]);
  129. u += du;
  130. v += dv;
  131. du += ddu;
  132. dv += ddv;
  133. }
  134. // ...
  135. </pre>
  136. <p>Ïî ñðàâíåíèþ ñ ïåðñïåêòèâíî-êîððåêòíûì òåêñòóðèðîâàíèåì èìååì áîëåå ìåäëåííûé
  137. âíóòðåííèé öèêë, íî ìåíüøåå äëÿ äëèííûõ ñòðîê êîëè÷åñòâî äåëåíèé. Ðàñ÷åò ua,
  138. va è èæå ñ íèìè ìîæíî ñäåëàòü ñ ïîìîùüþ òðåõ äåëåíèé, äåëåíèÿ íà length è
  139. (length*length) ìîæíî çàìåíèòü óìíîæåíèÿìè íà 1/length è 1/(length*length),
  140. áåðÿ ýòè çíà÷åíèÿ èç çàðàíåå ïîñ÷èòàííîé òàáëè÷êè. Ò.î., íà ñòðîêó ïðèõîäèòñÿ
  141. òðè äåëåíèÿ íåçàâèñèìî îò åå äëèíû. Êà÷åñòâî áîëåå-ìåíåå ïðèåìëåìîå; à äëÿ
  142. êîðîòêèõ ñòðîê ìîæíî èñïîëüçîâàòü îáû÷íóþ ëèíåéíóþ èíòåðïîëÿöèþ, òî÷íî òàê æå,
  143. êàê è â ñëó÷àå ñ ïåðñïåêòèâíî-êîððåêòíûì òåêñòóðèðîâàíèåì. Ïîëó÷àåì âïîëíå
  144. êîíêóðåíòîñïîñîáíûé ìåòîä òåêñòóðèðîâàíèÿ.
  145. </div>
  146. </td></table>
  147. <!-- Bottom Navigation -->
  148. <img src="../img/b.gif" width=500 height=1 alt=""><br><img src="../img/t.gif" width=500 height=2 alt=""><br>
  149. <table width=500 cellpadding=0 cellspacing=0 border=0>
  150. <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>
  151. <td><p class=pagetitle><img src="../img/t.gif" width=265 height=1 alt=""><br>demo.design<br>3D programming FAQ</td>
  152. <td align=center><p class=navy><a href="43.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>
  153. <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>
  154. <td align=center><p class=navy><a href="45.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>
  155. </table>
  156. <img src="../img/t.gif" width=500 height=4 alt=""><br>
  157. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  158. <img src="../img/t.gif" width=500 height=1 alt=""><br>
  159. <img src="../img/b.gif" width=500 height=1 alt=""><br>
  160. </center></body>
  161. </html>