
                  demo.design 3D programming FAQ, release 1a
                  ------------------------------------------

-------------------------------------------------------------------------------
     䠩   ᯮ짮 ᪫⥫쭮   楫.
-------------------------------------------------------------------------------

ঠ
----------
1. 
   1.1. ।  ᮣ襭
2. ᭮ 3D 䨪
   2.1.  ꥪ⮢  業
   2.2. ஥஢
   2.3.  ८ࠧ
   2.4. ᮢ 梥⭮ 㣮쭨
   2.5.   ந쭮 ன
3.   ⥩
   3.1. 祭 楢 ࠭
   3.2.  㤮
   3.3. Z-
   3.4. ⠫
4. ஢
   4.1. 筮
   4.2. 䨭
   4.3. ᯥ⨢-४⭮
   4.4. ࠡ᪮
5. ᢥ饭
   5.1.  ᢥ饭
   5.2.  ଠ  ꥪ
   5.3. ᢥ饭  
   5.4. ᢥ饭  
   5.5. ᢥ饭  
6. 
   6.1.  ᮢ ⥪  ᢥ饭
      6.1.1. 256-梥 ०
      6.1.2. 24/32- ०
      6.1.3. 15/16- ०
   6.2. 㡯ᥫ쭠 筮
   6.3. ⥪ᥫ쭠 筮
   6.4.  3D    㬭
   6.5.  䨫 ⥪
   6.6.  " 㡨"  樨 孮⥩

-------------------------------------------------------------------------------

᫨    FAQ, - ।,  - 㢨 
। release - :

Andrew Aksyonoff, 2:5036/5.47@fidonet
e-mail: shodan@chat.ru

-------------------------------------------------------------------------------

᫥  FAQ ࠭ ᫥騬 ⮤:
  - 몫뢠  http://www.halyava.ru/faq3d
  -  ன প   demo.design.uue
  -  ன প    FAQserver (Subj: DD3DFAQ) 
      襩    㣨 FAQserver',  ,
    , ᠬ ᤥ   ⮬  ᮮ⢥ 

ࠢ 짮 FAQserver' ⠭. ᫨ 㦭 ,  
   ⠪ 쬮:

  From: you, 2:1234/56.78
  To: FAQserver, 2:5036/5.47
  Subj: %HELP

FAQserver, , ᯮ ⮫쪮  ⮬ 砥, ᫨  
 FAQ  㣨 ࠧ (   㯠 
, demo.design.uue  த  室, etc).   뫪 
  ࠢ 250k.

     demo.design, ru.algorithms  ru.game.design.
ࢠ ᮢ, 뫪  ᠩ    ࠭ 
ਢ.

ᮡ ᯠᨡ Oleg Lubarsky (drlove@impuls.zhitomir.ua)  ᬥ
-⨭  Andrey Samoilov (asy@sense.simbirsk.su)   ᠩ
 HTML- FAQ.

-------------------------------------------------------------------------------

1. 
===========

1.1. ।  ᮣ襭
-------------------------------

।,  ⥫  - ᭮ ᢥ  ୮
䨪. ।,  ꥪ, 騩  㣮 ࠭ 
묨   ⥪ࠬ,  筮 ॠ筠  ⭮⥫쭮
 .  ।,   ᠬ ⥫ ᯮᮡ
ਭ  ᪨ ⮭,  ஬, , 㤥 뤥ঠ 
 ⮣ FAQ.

 稥  ⥫     ८ਨ
  ,  ⠪ ணࠬ஢. ਬ, 쭮 ᨫ쭮
४ 㬥 ᮢ 梥 2D 㣮쭨.

襭 - ᫥騥. ⥬ 3D न ᯮ ⠪:
                                      y
                                      |     z
                                      |   /
                                      | /
                               -------O-------x
                                    / |
                                  *   |
                                /     |

 㪢 x, y, z 祭 ⥫ ࠢ ᥩ Ox, Oy  Oz
ᮮ⢥⢥.  ।,     室 
窥 (*)  न⠬ (0,0,-dist),  ७  ࠢ   Oz,
    (0,0,0) (.. camera target = (0,0,0)),  Ox  窨
७  ࠢ ᫥ ࠢ,  Oy - ᭨ ,  Oz - 
࠭.  ࠭ - xSize  ySize ᥫ.

஥஢  ᪮ ࠭  ⮬ 砥 㤥 ⢫ 
㫠

    sx = xSize/2+x*dist/(z+dist),
    sy = ySize/2-y*dist/(z+dist).

   ᯮ 祭

    sx, sy - न ஥樨 窨  ࠭,
    x, y, z - 3D न 窨,
    dist - ﭨ   ( 室  窥 (0,0,-dist))  砫
           न,
    u, v - न  ⥪ (u -  ਧ⠫, v -  ⨪).

2. ᭮ 3D 䨪
====================

2.1.  ꥪ⮢  業
----------------------------

  筮 ࠭ 奬  3D ꥪ⮢  業.
 奬, , ᯮ,  3D Studio.

 業 ।⠢ ᮡ ᫥饥:
  -  ꥪ⮢
  -  筨 ᢥ
  -  ⥪
  -   ( 筮 ᯮ )

 ꥪ  ᫥騬:
  -  設
    * 設 । ᢮ 3D न⠬  ᮮ⢥騬 
      न⠬  ⥪
  -  ࠭
    * ࠭ । ६ 設  ⥪ன ( , 
      ⥪ன,  ਠ: ஬ ⥪   , ਬ,
      樥 ᥨ  ࠦ ᢥ)
  -  ꥪ
    *  , ᯮ (  ᬥ饭,  , 㣮 ,
      樥 ⠡஢,  ..)  ᨬ   ;
      筮   ᪮쪨 祢 窠  ௮ 
         ᯫ

 筨 ᢥ  ᫥騬:
  - 
  - ਥ (窠,   ࠢ  筨, target)
  - ⨯ (䮭/ࠢ/ࠢ)
  - 梥 (筮 RGB)

 ⥪ ।⠢ ᮡ אַ㣮 2D ⨭, 
뢠 䨪஢ ࠧ஢ (ਬ, 64x64, 128x128, 256x256).

   ᫥騬:
  -  (location)
  - ࠢ (筥, 窮,   ࠢ  ; target)
  - 㣮 ७ (FOV)
  - 㣮  ⭮⥫쭮 ᢮  (roll)

2.2. ஥஢
------------------

 㤥 ᯮ짮 ⮫쪮 筮 ᯥ⨢ ஥஢  ᪮
७ "⠭⭮" , ।  㭪 1.1 (⠬  ᠭ 
 ஥஢). 砩 ந쭮  㤥 ਢ 
 ⠭⭮ .

2.3.  ८ࠧ
-----------------------------

 ,  ᥣ       .
 㤥 ⮫쪮 ⪨ ᪠  3D ८ࠧ,  ⮬,   
  ,   ⮬,   ⠪      ࠡ.

 ᪮쪮 ନ. n- ,    ࠧ୮ n, 
  ࠧ n: 㯮冷祭  n ⢨⥫ ᥫ. 
, ࠪ᪨   ᠬ,    1D-ᨢ.  ࠧ
m  n (㤥   m*n, mxn): ⠡ ࠧ m  n,  
⪥ ன - ⢨⥫쭮 ᫮.  㦥 2D-ᨢ. ᥣ .
 ਬ  3x3:

    [ 15      y*z    0.6    ]
    [ 7       -3     91     ]
    [ sin(x)  0.123  exp(t) ]

 । 権  ࠬ  栬.  㤥
뢠  ⮫  ᬠਢ    ࠧ n*1.

 ᪠୮ ந ஢: ।   ஢
 ࠧ஢.   ᫮, ࠢ 㬬 ந
ᮮ⢥ ⮢ ஢. ਬ:

    [ 1 ]   [ 4 ]
    [ 2 ] * [ 5 ] = 1*4 + 2*5 + 3*6 = 32
    [ 3 ]   [ 6 ]

 ୮ ந: ।  (n-1)  
ࠧ n.  - , 祬,  ᭮, ௥ ᥬ
⥫.    ⠭  ⥫!!! ଠ쭮
।  ।⥫ , ࢠ ப ன  
 ,   ᫥騥 - ᮮ⢥騥 न 
⥫. ᪮   㤥 ॡ ⮫쪮  3D ࠭⢠,
 । ୮ ந  3D ஢ :

           [ Ax ]   [ Bx ]   | i  j  k  |   [ Ay*Bz-Az*Bx ]
     AxB = [ Ay ] x [ By ] = | Ax Ay Az | = [ Az*Bx-Ax*Bz ]
           [ Az ]   [ Bz ]   | Bx By Bz |   [ Ax*By-Ay*Bx ]

 ᫮  : ।    ࠧ஢.
  㬬 ( ,  ᫮  ⠡) ࠢ 㬬
ᮮ⢥ ⮢ ᫠-. ਬ:

    [ 1  x  500 ]   [ 8   a  3 ]   [ 9   a+x  503 ]
    [ 2  y  600 ] + [ 9   b  2 ] = [ 11  b+y  602 ]
    [ 3  z  700 ]   [ 10  c  1 ]   [ 13  c+z  701 ]

 㬭   ᫮: ।     
᫠;   १ ࠢ ந ᮮ⢥饣
 -⥫  ᫠-⥫.

 㬭  : ।    ⠪ ࠧ஢
a*b  c*d,  b = c. ਬ, ᫨ b = c,  a != d,   ⠭
⥫  㤥   ।. ⮬ 㬭 
A ࠧ஬ a*b   B ࠧ஬ b*d 㤥  C ࠧ஬ a*d, 
ன , 騩  ப i  ⮫ j, ࠢ ந ப i
 A  ⮫ j  B. ந ப  ⮫ ।
 㬬 ந ᮮ⢥ ⮢ ப  ⮫. ⮡
뫮  - ⭮, ਬ 㬭 ப  ⮫ ( 
 ࠢ , ; ⮬  ⠪ ࠭祭  ࠧ ):

                [ 4 ]
    [ 1 2 3 ] * [ 5 ] = 1*4 + 2*5 + 3*6 = 32
                [ 6 ]

 ⮡ ६  ,    த  
.  ਬ:

    [ 1 2 3 ]   [ 0 3 ]   [ 1*0+2*1+3*2 1*3+2*4+3*5 ]
    [ 4 5 6 ] * [ 1 4 ] = [ 4*0+5*1+6*2 4*3+5*4+6*5 ] = ...
    [ 7 8 9 ]   [ 2 5 ]   [ 7*0+8*1+9*2 7*3+8*4+9*5 ]

  ᫮    ⥬  ஬ ᢮,  
 ᫠,   ਢ ᢮⢠  믮 (ਬ,
A*B != B*A);   ᠬ   ,  ந 
A*B*C*D*...    ⮣,  ⠢ ᪮. , ᫨ 㣮,


    A*(B*C) = (A*B)*C.

 㤥  ⮬  ஥ ६  ३  ८ࠧ.
  (  ८ࠧ ࠭⢠, ࠭饥 ﭨ
 窠)  嬥୮ ࠭⢥, ᮣ᭮ ⥮६ , 
 ।⠢   㯥௮樨   ࠫ쭮 ७,
  ᫥⥫쭮 믮   ࠫ쭮 ७.
 ⮬ ᭮  ଠ   ꥪ -  
ᬥ饭,    㣮 .   ⮬  筮
,  ᤥ  ८ࠧ - ७  .

७ 窨 (, 窨  ⠪ ᬠਢ   
砫  砫 न  殬  ᮡ⢥ 窥)  न⠬
(x,y,z)   (dx,dy,dz)   ᫮  न.
  १ -  (x+dx,y+dy,z+dz).   ᫮ - 
-७.

 - ⨥ 㦥  ᭮.  ⮦ ⮥. ᬮਬ 
ਬ  窨 (x,y,z) ⭮⥫쭮  z.  ⮬ 砥 z 
 ,  (x,y)  ⠪ ,    2D  ⭮⥫쭮
砫 न.

ᬮਬ,   न  窨 A' - १  A(x,y)
 㣮 alpha.

        y        * A' - १
        |       -       
        |      -
        |     -
        |    -            * A - 室
        |   -         ---       窠
        |  -      ---
        | -   ---
        | ---
    ----O-----------------------x
        |
        |

 r = sqrt(x*x+y*y).  㣮 AOx ࠢ phi, ⮣  㭪 ,
 cos(phi) = x/r, sin(phi) = y/r.  A'OA ࠢ  ᫮ alpha.


    x' = r*cos(alpha+phi) = r*(cos(alpha)*cos(phi)-sin(alpha)*sin(phi)) =
       = (r*cos(alpha))*cos(phi)-(r*sin(alpha))*sin(phi) =
       = x*cos(phi)-y*sin(phi)
    y' = r*sin(alpha+phi) = r*(cos(alpha)*sin(phi)+sin(alpha)*cos(phi)) =
       = (r*cos(alpha))*sin(phi)+(r*sin(alpha))*cos(phi) =
       = x*sin(phi)+y*cos(phi)

 嬥୮ , ⠪ ࠧ

    x' = x*cos(phi)-y*sin(phi)
    y' = x*sin(phi)+y*cos(phi)
    z' = z

     㣨 ᥩ  (  Ox, Oy).
 ⭮⥫쭮 ந쭮 , 室饩 १ 砫 न,
 ᤥ    ⮢ - ᤥ  ⭮⥫쭮 Ox
⠪, ⮡   ⠫ ௥ୠ Oy, ⥬  ⭮⥫쭮
Oy ⠪, ⮡   ᮢ  Oz, ᤥ ᮡ⢥ ,  ⥬
  ⭮⥫쭮 Oy  Ox.   뢥  
⠪   㡥  ⮬,   祭 ஬.

ᯮ      ⥫쭮 ᬮਬ  뢥 
 .  , 

    [ x' ] = [ cos(phi)  -sin(phi)  0 ] [ x ]
    [ y' ] = [ sin(phi)   cos(phi)  0 ] [ y ]
    [ z' ] = [ 0          0         1 ] [ z ]

    㣮 phi    ⮩  楩,   
⮩  (㬭   -)   न
⮩ 窨.   먣   -  㬭 
  ॡ  権, 祬  x'  y'  㫠.

⢮    砥  ࠧ  ᢮⢥ A*(B*C) = (A*B)*C.
   ᪮쪮 ⮢ , ਬ,  ( ࠧ ⮫쪮,
᪮쪮    ⭮⥫쭮 ந쭮 ),   
 栬 A, B, C, D, E (A -  ᠬ ࢮ ,
E - ᫥).    p  砥

    p' = E*(D*(C*(B*(A*p)))) = E*D*C*B*A*p = (E*D*C*B*A)*p =
       = (E*(D*(C*(B*A))))*p = T*p,



    T = (E*(D*(C*(B*A))))

 ८ࠧ, 饣 樥  ⮢. ⠢
 ࠧ  ,   쭥襬  ஡ ਬ 쭮
᫮ ८ࠧ   ⮢      ᥣ
 㬭   .

 ࠧ,     楩,   
⮢ ⠪ 㤥  楩,   쭮 
.    ࠫ ७,   ⠡஢.
   ?

 ᠬ ,  ८ࠧ ⮦  뢠   .
쪮   3x3  3- ஢ ᯮ ⠪ 뢠
த 4- न   4x4.  ⮬  ஢ 

    [ x ]
    [ y ]
    [ z ]

ᯮ  

    [ x ]
    [ y ]
    [ z ]
    [ 1 ]

  ந  3x3 ᯮ  4x4 ⠪ :

    [ a b c d ]
    [ e f g h ]
    [ i j k l ]
    [ 0 0 0 1 ]

,  ᫨ d = h = l = 0,   १ ਬ  権
砥   ᠬ,     3x3.

 ࠫ쭮 ७ ⥯ । 

    [ 1 0 0 dx ]
    [ 0 1 0 dy ]
    [ 0 0 1 dz ]
    [ 0 0 0 1  ]

 ⠡஢  ।    3x3,    4x4:

    [ kx  0   0  ]     [ kx  0   0   0 ]
    [ 0   ky  0  ]  [ 0   ky  0   0 ]
    [ 0   0   kz ]     [ 0   0   kz  0 ]
                       [ 0   0   0   1 ]

 kx, ky, kz - 樥 ⠡஢  ᮮ⢥騬 .

 ࠧ, 砥 ᫥饥.  㦭  ८ࠧ
࠭⢠   楩 4x4 । , ࠧ 
ࠧ ८ࠧ.  ᫥⥫쭮 믮 ᪮쪨
८ࠧ ᮢ  १⮬  ८ࠧ T, ஥
⠪  楩 4x4, 塞  ந   
८ࠧ.  冷 㬭, ⠪  A*B != B*A. 
ਬ ८ࠧ T   [ x y z ] ⠥  १
㬭  T   [ x y z 1 ].   .

⠫ ⮫쪮  ਬ , 祬 A*B != B*A.  A - 
७, B - . ᫨  ᭠砫 ७ᥬ ꥪ,  ⮬ ୥
⭮⥫쭮 業 न ( 㤥 B*A), 稬   , 
㤥, ᫨ ᭠砫 ꥪ ,  ⮬ ७ ( 㦥 A*B).

2.4. ᮢ 梥⭮ 㣮쭨
----------------------------------------

  ⮣,  ᮢ   梥⮬ 㣮쭨, 
  3D 䨪   ⮨. ⮬  ᭥.

쬥  㣮쭨.  ࠦ  ࠭ -  ਧ⠫
१, 祬 - ⮣,  㣮쭨 - 䨣 㪫, 
ப ࠭ ᮮ⢥    १. ⮬ 筮
ன  ᥬ ப ࠭,  묨 ᥪ 㣮쭨 (
,  쭮  ᨬ쭮 祭 y  設 㣮쭨),
 ᮢ ᮮ⢥騥 ਧ⠫ १.

    ----------------------------
    |          A               |
    |        ****              |
    |      *******             |
    |    **********            |
    |  B************           |
    |     ***********          |
    |        *********         |
    |-----------@@@@@@@--------|
    |              *****       |
    |                 ***      |
    |                    C     |
    ----------------------------

㥬 設 ⠪, ⮡ 設 A 뫠 孥, C - , ⮣ 
 min_y = A.y, max_y = C.y,    ன  ᥬ   min_y
 max_y. ᬮਬ -  sy, A.y <= sy <= C.y. ᫨ sy < B.y, 
 ᥪ ஭ AB  AC; ᫨ sy >= B.y -  ஭ BC  AC.  
न  設, ⮬    ࠢ ஭  
祭 㦭 ஭  אַ y = sy. 稬   १. 
   ,    ,   ࠢ, ࠢ  न
 x  塞 祭, ᫨ . 㥬  १, 塞 楤
  ப -  㠫, ॣ㮫쭨 ᮢ.

⠭  ஡  宦 祭 אַ y = sy (⥪饩
ப)  ஭ 㣮쭨, ਬ AB. 襬 ࠢ אַ AB 
ଥ x = k*y+b:

    x = A.x+(y-A.y)*(B.x-A.x)/(B.y-A.y)

⠢塞  ⭮  ⥪饩 אַ 祭 y = sy:

    x = A.x+(sy-A.y)*(B.x-A.x)/(B.y-A.y)

,  饬-,  .  㣨 ஭ 祭  ᮢ襭 筮
⠪ .    ਬ .

    // ...
    //  㥬 設 (A,B,C)
    // ...
    for (sy = A.y; sy <= C.y; sy++) {
      x1 = A.x + (sy - A.y) * (C.x - A.x) / (C.y - A.y);
      if (sy < B.y)
        x2 = A.x + (sy - A.y) * (B.x - A.x) / (B.y - A.y);
      else
        x2 = B.x + (sy - B.y) * (C.x - B.x) / (C.y - B.y);
      if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; }
      drawHorizontalLine(sy, x1, x2);
    }
    // ...

, ࠢ,   ,  B.y = C.y -  ⮬ ( ⮫쪮 ⮬,
⮬  ᫨ C.y = A.y,  㣮쭨 ⮩  ᮢ   ⮨,
  ᮢ ਧ⠫ ;  ᫨ B.y = A.y,  sy >= A.y 
   B.y - A.y  ) 砥 ந ⪠   .
  ᮢᥬ -:

    // ...
    //  㥬 設 (A,B,C)
    // ...
    for (sy = A.y; sy <= C.y; sy++) {
      x1 = A.x + (sy - A.y) * (C.x - A.x) / (C.y - A.y);
      if (sy < B.y)
        x2 = A.x + (sy - A.y) * (B.x - A.x) / (B.y - A.y);
      else {
        if (C.y == B.y)
          x2 = B.x;
        else
          x2 = B.x + (sy - B.y) * (C.x - B.x) / (C.y - B.y);
      }
      if (x1 > x2) { tmp = x1; x1 = x2; x2 = tmp; }
      drawHorizontalLine(sy, x1, x2);
    }
    // ...

  . , ਧ⠫ , , ᮢ 㬥  騥.

2.5.   ந쭮 ன
----------------------------------

ᬮਬ     - 業 ஥஢  ࠭ - ᪨
אַ㣮쭨  3D ࠭⢥,  ᪮ ண  ஥஢.
 ⠭⭠ , ਬ,  窮 (0,0,-dist)  ࠭ 
設 (-xSize/2,ySize/2), ..., (xSize/2,-ySize/2).   
⥬ ६ ࠬ, 騬  窨 ७  ࠢ ।,
ࠢ  ;  "।" ᮥ 業 ஥஢  業 ࠭,
 "ࠢ" ᮥ 業 ࠭  ࠢ  ࠭,  "",
ᮮ⢥⢥, 業 ࠭    ࠭. 稬  
 p, q  r ᮮ⢥⢥,  業 ஥஢  s.  ਬ 
⠭⭮ .

                      y
                      |           z
                      |         /
                 =====^=======+
                      @     / + <--------- ࠭
                      @ <-----+----------- r, ""
                      @ /     +
    ------------------O@@@@@@@>-------x
                    @ |     ^-+----------- q, "ࠢ"
                  @ <---------+----------- p, "।"
                @     |       +
              @    ===========+
            *         |
          /           |
                      |
                      |

 ( ⠭⭮ ; 稬    Sp, Sq, Sr, Ss)

    Sp = p = (0,0,dist)
    Sq = q = (xSize/2,0,0)
    Sr = r = (0,ySize/2,0)
    Ss = s = (0,0,-dist)

   ௥   窠 - 業 न  
3D ࠭⢥ ⥬ न.   ꥪ   ᬠਢ 
⥬  न (x,y,z),  ⥬ न ⠭⭮ 
(Sp,Sq,Sr)   ⥬ (p,q,r), ᮮ⢥饩 - ந쭮
.   砥, ᫨ (a,b,c) - न 窨  ⥬ न
 (筥,  ⥬ न  業஬  窥 s  ᮬ (p,q,r)),
 न ஥樨 窨  ࠭ ࠢ

    screenX = xSize/2 + xSize/2 * a/c
    screenY = ySize/2 - ySize/2 * b/c

 砥 ⠭⭮  室  筮 ⥬ न  ⥬
न  祢:

    a = x / (xSize/2)
    b = y / (ySize/2)
    c = (z + dist) / dist

⠢     screenX, screenY, 稬  ࠧ  ᠬ 
 ஥樨  ⠭ .

᪮  ⠭⭮ ன  筮 㤮  ⭮ ࠡ,
 ந쭮    ᤥ ⠪ ८ࠧ ࠭⢠,
   ᮢ ந   ⠭ .  , ⠪
८ࠧ,   p, q, r ३  Sp, Sq, Sr,  窠 s  
Ss.

⠥   *⭮* ८ࠧ;   ॢ Sp,
Sq, Sr, Ss  p, q, r, s. ८ࠧ, ॢ饥 Ss  s ( ) - 
 ࠫ ७; ⠥  ८ࠧ ॢ Sp,
Sq, Sr  p, q, r.     न p, q, r  ⥬ न
(x,y,z):

    p = (px,py,pz)
    q = (qx,qy,qz)
    r = (rx,ry,rz)

 Sp, Sq, Sr न ( ⮩  ⥬)   ࠢ ᫥饬:

    Sp = (0,0,dist)
    Sq = (xSize/2,0,0)
    Sr = (ySize/2,0,0)

 T - ᪮  ॢ,

        [ a b c ]
    T = [ d e f ], a..i - - .
        [ g h i ]

᪮ T ॢ Sp, Sq, Sr  p, q, r;  

    p = T*Sp
    q = T*Sq
    r = T*Sr

, ⠢, ਬ, p  Sp, 砥:

    [ px ]   [ a b c ] [ 0    ]    [ c*dist ]
    [ py ] = [ d e f ] [ 0    ] =  [ f*dist ], 㤠
    [ pz ]   [ g h i ] [ dist ]    [ i*dist ]

    c = px/dist
    f = py/dist
    i = pz/dist.

筮 室  ⠫   T:

        [ qx*2/xSize  rx*2/ySize  px/dist ]
    T = [ qy*2/xSize  ry*2/ySize  py/dist ]
        [ qz*2/xSize  rz*2/ySize  pz/dist ]

   ⭮  ⮬ ८ࠧ.   ⭮
楩  T,   ⠪ 楩 T1, 

                      [ 1 0 0 ]
    T * T1 = T1 * T = [ 0 1 0 ]
                      [ 0 0 1 ]

⭠ ,  ,    ᥣ,   ᫥
  饬 砥 - 筮 ⭠ .    砥 -
ᯥ樠쭮   T (⭥, - ⮣,  T - ⮣쭠
)   ⮫쪮 ᥣ ,   ⠥ 祭 :

        [ qx*2/xSize  rx*2/ySize  px/dist ]   [ qx1 rx1 px1 ]
    T = [ qy*2/xSize  ry*2/ySize  py/dist ] = [ qy1 ry1 py1 ]
        [ qz*2/xSize  rz*2/ySize  pz/dist ]   [ qz1 rz1 pz1 ]

         [ qx1/lq  qy1/lq  qz1/lq ]
    T1 = [ rx1/lr  ry1/lr  rz1/lr ]
         [ px1/lp  py1/lp  pz1/lp ]



    lp = px1*px1 + py1*py1 + pz1*pz1
    lq = qx1*qx1 + qy1*qy1 + qz1*qz1
    lr = rx1*rx1 + ry1*ry1 + rz1*rz1

 ᭠砫 ࠫ ७, ᮢ騩 s  Ss,  ⮬ 祭
८ࠧ,  ࠧ  稬 ८ࠧ, ॢ饥 ந
  ⠭.

  ᭨, , ᮡ⢥  न p, q, r १
騥   ࠪ⨪: , ࠢ, 㣮 ७  㣮
. 3D Studio (  ᫥  ) 뢠    ⠪
:

    1. ⠥ p = target - location
    2. ᫨ p.x == 0  p.z == 0,  q = (0, 0, 1);  q = (p.z, 0, -p.x)
    3. ⠥ r = crossProduct(p, q) - ୮ ந p  q
    4. ⠥ lp = length(p) -  p
    5. ਢ r  q   2*lp*tan(FOV/2)

   뢠    ᢮ ,  㤮 ᤥ
᫥ 室  ⠭⭮  -  ⮬ 砥 砥  
⭮⥫쭮  z  㣮 roll.

 ࠧ, ⥫쭠  ॢ  ।⠢ ᮡ
ந  ࠫ쭮 ७,  T1   
  z  㣮 roll:

    FinalCameraMatrix = RollMatrix * T1 * MoveMatrix

  RollMatrix  MoveMatrix 祢.

3.   ⥩
============================

3.1. 祭 楢 ࠭
-------------------------------

    ꥪ,  ண    . 筮
⠪ ꥪ ⠢     業.    ࠭
  㢨 ⮫쪮   ஭ - 楢. ࠭ - ᪮, 
  3D ࠭⢮   ࠭⢠.  , 楢 ஭
 ⮫쪮   ࠭⢠,  ⮣,  ஥ "ᬮ" ଠ
 ⮩ ࠭, ࠢ ** ꥪ. ஢ਢ,   ࠭⢮
 ,  ࠧ ।,   ࠭ 楢 ( ,
   㢨 楢 ஭ ⮩ ࠭)     ᮢ.

 ࠭  設 v1, v2, v3  ଠ (nx,ny,nz).  ࠢ
᪮,  ன  , 㤥  

    nx*x+ny*y+nz*z+d = 0.

d 室  ⮣ 䠪,  v1  ᪮ :

    nx*v1.x+ny*v1.y+nz*v1.z+d = 0,
    d = -(nx*v1.x+ny*v1.y+nz*v1.z).

㭪 nx*x+ny*y+nz*z+d ਭ ⥫ 祭   ஭ 
᪮, ⥫    ࠢ   ᠬ ᪮. 窠
(v1.x+nx,v1.y+ny,v1.z+nz) , 祢,  ⮬ ࠭⢥, 㤠
࠭ . 祭 㭪樨 (  㭪樥 )  ⮩ 窥
ࠢ

    nx*(v1.x+nx)+ny*(v1.y+ny)+nz*(v1.z+nz)+d =
    nx*(v1.x+nx)+ny*(v1.y+ny)+nz*(v1.z+nz)-(nx*v1.x+ny*v1.y+nz*v1.z) =
    nx*nx+ny*ny+nz*nz > 0.

 ࠧ, ᫨ 祭 㭪樨  - 窥  ,  ࠭
 ⮩ 窨 ⥭樠쭮 .    ࠭  襩
,     䨪஢  窥 (0,0,-dist).  ࠧ,
砥,  ࠭,  

    -nz*dist-(nx*v1.x+ny*v1.y+nz*v1.z) < 0,

,  ࠢᨫ쭮,

    nz*dist+nx*v1.x+ny*v1.y+nz*v1.z > 0,

    ६   ࠡ  ᮢ   ⮨.

⤥  -   ଠ  ࠭. 筥,   
  ଠ,  㤥 ᬮ  ꥪ. 筮  ஡
蠥   ⠯ ஥ 3D  - ਬ,  3D Studio
뢠 設 ࠭  浪 A-B-C ⠪, ⮡ ୮ ந
BA*CA  뫮 ଠ.   ᯮᮡ -  ७   ꥪ
( ,    業 殮,   - - ⮤
  ਤ㬠 ᪮쪮 㣮)  ᯮ짮 : ᫨  ⮩ 窨
㭪  ⥫쭠,   ࠭ 类 ,   
 nx, ny  nz.

⠫ ⬥,   㪫 ꥪ⮢  ⮤  蠥
  㤠  ⥩.  㪫     
 ᮪ ᫮ ࠭,  쭥襩 ஢થ   
ᮡ⢥ ᮢ.

3.2.  㤮
-----------------------

    ࠭ (.. 業),  ॡ ᮢ.
㥬 ࠭  㤠    㥬  ࠭, 稭 
ᠬ 㤠. 쭮 ࠭ ࠪ⨪ 㤠 
࠭ ABC -  । 祭 z, mid_z = (A.z+B.z+C.z)/3.   
. ,  筮 筮 .

, ࠢ, ᪮쪮 ஡.

-,  ஬ ᯮ ࠭     
 ࠢ쭮 १ -   浪 ࠭  , 
ࠢ쭮.  ⠭ ਬ.

        +----+    +----+
        |    |    |    |
    +---|    |--------------
    |   |    |             |
    +---|    |--------------
        |    |    |    |
        |    |    |    |
    +-------------|    |---+
    |             |    |   |
    +-------------|    |---+
        |    |    |    |
        +----+    +----+

-,  ஬ ᯮ ࠭  ᯮ짮 । 祭
z  ࠪ⨪ 㤠  ⮦  ࠢ १.
ਬ  .  ⮬ 砥 ਧ⠫ ࠭  ᮢ뢠 ன,
  । 祭 z     ⠪ ࠧ 砥,  
 ᮢ뢠 ࢮ.   襭 ⮩ ஡ - -
 ࠪ⨪ 㤠,  ஢,  뢠饥 ⠪
権.

           y
           |        |
           |        |  <- ࠭ #1 (ࠫ쭠 Oxy)
           |        |
           | --------------------------------------
           |        ^^^ ࠭ #2 (ࠫ쭠 Oxz)
           |
           |
           |
           |
  --*------O-------------------------------------------------z
    ^-- 

 ,  ᯮ짮 ⮣ ⬠ ᮢ뢠   ࠭
業,   讬 ⢥ ࠦ  㣠 ࠭  㤥
   ६  ᮢ   筮 ⮣
⥩.   ᮢ襭 .  ⠪ 砥 楫ᮮࠧ ᯮ짮
- 㣨 ⮤ (ਬ BSP  PVS, ⠫,  .).

3.3. Z-
------------

  (ᮡ⢥ z-) ࠧ஬  ࠭,  쥬  -
訬 ᫮, ⮫쪮 訬,  न z  祪 業 
. ਬ, ᫨ z - fixedpoint 16:16,   ᯮ짮 ᨬ쭮
 祭,   0x7FFFFFFF.   㥬 窨 ⠥
祭 z; ᫨  , 祬 祭  z- (窠  -
㣮 窮),  , 祬 -dist (窠 室  ன), 
室  ᫥饩 窥. ᫨ ,  㥬   ࠭ ( 
),   z- 뢠 ⥪饥 祭 z.  ᮪  
襣 :

    // ...
    if (z > -dist && z < zbuffer[screenX][screenY]) {
      screen[screenX][screenY] = color;
      zbuffer[screenX][screenY] = z;
    }
    // ...

   祭  z,  z1 = 1/(z+dist), ⠪   稭
  ࠭ ,   ௮   १
( ஡  ᠭ  4.3).  ᫮   - 窠
஦ 㣮, ᫨ 祭 z1 ** 祭  z-;  窠
室  ன, ᫨ z1 < 0.  ⮦  :

    // ...
    if (z1 > 0 && z1 > zbuffer[screenX][screenY]) {
      screen[screenX][screenY] = color;
      zbuffer[screenX][screenY] = z1;
    }
    // ...

  .

 ᠬ ⮩ ⮤ 㤠  ⥩, 祬 ᥣ 騩
 ࠢ १. ⢥ ஡ - ᪮, z-,
 ᠬ ⮩,   ᠬ  ⮤.

3.4. ⠫
------------

 ⮤ ।祭  .. indoor environments -  㪢쭮 ॢ
"⭠ ।";    ७ - .  ⢥
ਬ  㦨 Doom, Quake.

 ⮬ 砥 業 ⠢  .  易   㣮
- 室 - ﬨ, , 祬 㣮.   ⠪ 室
蠥  , 뢠 ⠫.  ᮢ 業 筮
ᮢ ⥪    ⥬,    .  ,   
,    *⮫쪮* १ ⠫.

 ࠧ,  ᮢ ᥩ 業   ६  㥬 ⥪
, ᯮ  ⮤ 㤠  ⥩ (ਬ, 
㤮  祭 楢 ࠭).  ᫨   ᮢ 
砥 , 祭  ⠫,   㥬 , 
 १  ⠫, 祬 ᥪ  㦥  ஥樨 ⮣ ⠫.

 筮, ᮪   ᭥:

    // ...
    void drawRoom(int roomID, polygon *clipArea) {
      int i;

      for (i = 0; i < rooms[roomID].numFaces; i++)
        drawFace(&rooms[roomID].face[i], clipArea);
    }

    void drawFace(polygon *face, polygon *clipArea) {
      polygon *newClipArea;

      if (face->isPortal) {
        if (isVisible(face, clipArea) {
          newClipArea = clipPolygon(face, clipArea);
          drawRoom(face->destinationRoom, newClipArea);
        }
      } else drawClippedPolygon(face, clipArea);
    }

    // ...

    drawRoom(currentRoom, fullScreen);

    // ...

 㭪 isVisible(face, clipArea) 頥 false, ᫨ ࠭ face 
 祭 clipArea  ᥪ; 㭪 clipPolygon 頥
祭  face  clipArea (  ᥪ face  clipArea 
); fullScreen -  ࠧ஬  ࠭ (  㦭 
ᮢ).

 த  Alpha 2 - ⮢ engine, ᯮ騩 ⠫  ᠭ 
TMT Pascal, 祬,  ⭮, 㯭  室.    
http://www.geocities.com/CapeCanaveral/5402.

⠫ 㯮,  ᬮ  ,    ଥ ⮤  ॡ
 ᮢ ந쭮 ࠭, 祭  ந ࠭,
   祭  bounding box ஥樨 ⠫.

4. ஢
==================

4.1. 筮
-----------

 ⥪஢ 㫨 ⠪ ࠧ:  ࠭ - ᮣ᭮
।, 㣮쭠 -     ⥪ன.   
窠 ࠭ 襭 梥⮬ ᮮ⢥饩  窨  ⥪. 
뢠  ࠧ.  窠 ࠭  न⠬  ࠭
(sx,sy), ਭ ஥樨 ࠭. ॡ   梥,  
梥 ᮮ⢥饩 ⮩ 窥 ࠭ 窨 ⥪.   ⮣ 
 न ⥪  ⮩ 窨 - 筥,  ⮩ 窨, ஥樥
ன  ࠭   (sx,sy).

 設 ࠭  窨 A(Ax,Ay,Az), B(Bx,By,Bz)  C(Cx,Cy,Cz), 
ᮮ⢥騥  窨 ⥪ - (Au,Av), (Bu,Bv)  (Cu,Cv). 
न ⥪  窨, ஥樥 ன  (sx,sy).

 祪 (x,y,z), ஥樥   (sx,sy) :

    sx = xSize/2+x*dist/(z+dist),
    sy = ySize/2-y*dist/(z+dist).

 饭  㤥 ᯮ짮 祭

    i = sx-XSize/2,
    j = YSize/2-sy,
    Z = z+dist.

   ਬ 

    i = x*dist/Z,
    j = y*dist/Z,

,  ࠢᨫ쭮:

    i*Z = x*dist,
    j*Z = y*dist.

ᬮਬ  D, ਭ ࠭.   D = A+a*(B-A)+b*(C-A), ⠪
    ࠭. D 筮  ன (a,b).   न
⥪ ( ⮣,  ⥪ 뢠 )  ⠪:

    Du = Au+a*(Bu-Au)+b*(Cu-Au),
    Dv = Av+a*(Bv-Av)+b*(Cv-Av).

 ஥ D  ࠭  ࠧ   न (sx,sy), ⮣  
믮 ᠭ  ᮮ⭮襭:

    i*DZ = Dx*dist,
    j*DZ = Dy*dist.

⠢  न D, ࠦ १ न A, B  
樥 a, b:

    i*(Az+a*(Bz-Az)+b*(Cz-Az)+dist) = dist*(Ax+a*(Bx-Ax)+b*(Cx-Ax)),
    j*(Az+a*(Bz-Az)+b*(Cz-Az)+dist) = dist*(Ay+a*(By-Ay)+b*(Cy-Ay)),

..  ਫ,  AZ = Az+dist, , , ⮬ BZ-AZ = Bz-Az,
   㪮:

    i*(AZ+a*(BZ-AZ)+b*(CZ-AZ)) = dist*(Ax+a*(Bx-Ax)+b*(Cx-Ax)),
    j*(AZ+a*(BZ-AZ)+b*(CZ-AZ)) = dist*(Ay+a*(By-Ay)+b*(Cy-Ay)).

뤥 a  b:

    a*(i*(BZ-AZ)-dist*(Bx-Ax))+b*(i*(CZ-AZ)-dist*(Cx-Ax)) = dist*Ax-i*AZ,
    a*(j*(BZ-AZ)-dist*(By-Ay))+b*(j*(CZ-AZ)-dist*(Cy-Ay)) = dist*Ay-j*AZ.

稫 ⥬   ࠢ,  ன   a  b, 
    u  v.   M = BA (Mx = Bx-Ax  ..)
  N = CA, 稬 d = dist (   ⪮ ). 
  ࠢ ९  :

    a*(i*Mz-d*Mx)+b*(i*Nz-d*Nx) = d*Ax-i*AZ,
    a*(j*Mz-d*My)+b*(j*Nz-d*Ny) = d*Ay-j*AZ,

  ⥬ (ਬ,  㫠 ࠬ) 砥:

        (dAx-iAZ)(jNz-dNy)-(dAy-jAZ)(iNz-dNx)
    a = ------------------------------------- =
        (iMz-dMx)(jNz-dNy)-(iNz-dNx)(jMz-dMy)

        djAxNz-ddAxNy-ijAZNz+idAZNy-diAyNz+ddAyNx+ijNzAZ-djAZNx
      = ------------------------------------------------------- =
        ijMzNz-idMzNy-djMxNz+ddMxNy-ijMzNz+idNzMy+djNxMz-ddNxMy

        dj(AxNz-AZNx)+dd(AyNx-AxNy)+id(AZNy-AyNz)
      = ----------------------------------------- =
        id(MyNz-MzNy)+dj(NxMz-MxNz)+dd(MxNy-NxMy)

        i(AZNy-AyNz)+j(AxNz-AZNx)+d(AyNx-AxNy)
      = --------------------------------------
        i(MyNz-MzNy)+j(NxMz-MxNz)+d(MxNy-NxMy)

筮 砥

        i(AZMy-AyMz)+j(AxMz-AZMx)+d(AyMx-AxMy)
    b = --------------------------------------
        i(MyNz-MzNy)+j(NxMz-MxNz)+d(MxNy-NxMy)

 㬭   饭,     ᮢᥬ .

⠫ , ⠢ Mx = Bx-Ax  ⠪ ,  ⮬ ⠢ 
a  b    Du  Dv.   ⠭ - ᮪,
- ,    Du  Dv  ࠢ   
᪮쪮 ப.

     - ᭮.  , , 

    u = (C1*sx+C2*sy+C3) / (C4*sx+C5*sy+C6),
    v = (C7*sx+C8*sy+C9) / (C4*sx+C5*sy+C6),

祬 C1, ..., C9 -  - 樥, 騥  ࠭. 
    樥  ࠧ  ࠭,  ⮬ 
u, v  ᠭ  ப  㫠.   ࠢ 砥 
    .  ᫨誮 . ⮬  ⮤
⥪஢  ᠬ  ᯮ ਡ ᫥,  
  ⨬ 㫠.

⮨ ⬥  䠪,   ᠬ    ࠭  易⥫쭮
  㣮쭮 -     設 㣮쭮 ࠭.
  ᠬ ࠢ   ⠫ ᠭ ⮤ ⥪஢.

4.2. 䨭
-------------

 ⮤ ⥪஢ ᭮  ਡ u, v 묨 㭪ﬨ.
⠪,  u -  㭪, u = k1*sx+k2*sy+k3.   k1,
k2, k3 室  ⮣,     設 ࠭ u  ᮢ 
 祭 -     ࠢ,     
室  樥,  ⮬  u  ⮩ 㫥.   
ࠢ  -  㬭  ᥫ.

㤥 ᮢ ࠭  ப -  饯ਭ, 쭮 ,  
  㬮⥫⢠ - . 設 ࠭ ࠭
㥬  sy (ਬ, A.sy <= B.sy <= C.sy).   ப 
 砫쭮 祭 x, u (⠪ ,    x,  u   אַ
 ⮦ ),  ⠪  ⮩ ப.

              A
             /  \
            /     \
           *--------*
          /           B
         /          /
        /        /
       /      /
      /    /
     /  /
    //
   C

 ᮢ 砥, ਬ,

    x_start = A.sx+(current_sy-A.sy)*(C.sx-A.sx)/(C.sy-A.sy),
    u_start = A.u+(current_sy-A.sy)*(C.u-A.u)/(C.sy-A.sy),
    x_end = A.sx+(current_sy-B.sy)*(B.sx-A.sx)/(B.sy-A.sy).
    length = x_end - x_start.

 設 ᯮ짮   㫠 -  㦥 ஡ ᮢ
㣮쭨,   ⥪஢. 筮   ࠭ x_start, x_end,
u_start,   室    ਡ 

    delta_x_start = (C.sx-A.sx)/(C.sy-A.sy),

 筮 뢠 饭  x_end, u_start.  ⮫쪮 
⭮ ᫥  ⥬,  ஭ ࠢ,  - ,    
ᥩ ஬⪥ 室 -   AB,   BC,  ᮮ⢥⢥ 
饭. 祬,   - 㦥 몭 ᮢ 㣮쭨. 
ਬ  ᤥ 襭 " " - ஢塞,  ⮪ - AB 
BC - ᥪ ⥪ ப, ⠥ x/u/v   , ⠥ 
ப  ६ ᮮ⢥騥   (  襬 x) 祭 u
 v.

 . ⠫ 砫 ப,  ப, u  砫 ப. ⠫
,  ࠧ  u = k1*sx+k2*sy+k3,   室  ᫥饬 ᥫ
ப   u   k1 (⠪    du/dsx).  ᫮ 
 - . ਬ, ⠪:

               A
              /  \
             /     \      x_start = A.sx+(B.sy-A.sy)*(C.sx-A.sx)/(C.sy-A.sy),
            /        \    x_end = B.sx,
           *-----------B  u_start = A.u+(B.sy-A.sy)*(C.u-A.u)/(C.sy-A.sy),
          /          /    u_end = B.u,
         /        /       du_dsx = (u_start-u_end)/(x_start-x_end).
        /      /
       /    /
      /  /
     //
    C

du/dsx -  ᫮,     ᥬ 㣮쭨, ⮬ 
⠥  ⠬,  㤮,  ६ ⠭ 祭.

v (   ᮮࠦ) ⠥ ᮫⭮ 筮 ⠪ ,  ⮫쪮 
 ਢ 㫠 u   v,  .

 ⠫ ⮫쪮   ᮢ  ப:

    // ...
    u = u_start;
    v = v_start;
    for (current_sx = x_start; current_sx <= x_end; current_sx++) {
      putpixel(current_sx, current_sy, texture[(int)v][(int)u]);
      u += du_dsx;
      v += dv_dsx;
    }
    // ...

ன  ᥬ ப ࠭ - .. ஡ current_sy  祭
 A.sy  C.sy (設 ஢!), 稬 ⥪஢ ࠭.
Voila!

4.3. ᯥ⨢-४⭮
----------------------------

 ⮤ ᭮  ਡ u, v 筮-묨 㭪ﬨ. ⪮
,  ᮢ  ப ࠧ  ᪨ (筮 ᪮쪮
᪮  8/16/32 ᥫ   ⠢訩 ந쭮 ), 
砫    ᪠   祭 u, v,   ᪥
 ௮ .

 祭 u  v,  ਭ樯,    㫠  4.1, 
筮 ᯮ  ⮩ .  ᭮  ⮬ 䠪,  祭
1/Z, u/Z  v/Z   sx, sy . ⥫⢮ ⮣ 䠪 
饭.  ࠧ, 筮   設  1/Z, u/Z,
v/Z    ௮஢ - 筮 ⠪ ,  ௮ u  v
 4.2. 祬, ⠪   祭   sx, sy ண , 
௮   ᨫ쭮 ਡ १,  ᮫⭮ !

   祭 u, v  

    u = (u/Z) / (1/Z),
    v = (v/Z) / (1/Z).

  ⠭ ᮢᥬ .  ᮢ 㣮쭨,  ॡ
௮㥬  u  v,   4.2,  1/Z, u/Z, v/Z. ஬ ⮣, ࠭
⠥ d(u/Z)/dsx, d(v/Z)/dsx, d(1/Z)/dsx ( ,   ᠬ
u/Z, v/Z, 1/Z ᮮ⢥ 蠣  dsx  1) ⠪,  ⠫ du/dsx - 
㤥 㦭  ண ᫥  祭 u, v.   㥬
᪠  8/16/32 ᥫ ( ᠬ , ᪠  ;  ᫨
 - ⥯ ,   ᫥ du/dx  dv/dx  ⥪饣 ᪠
    ᪠  ᤢ ࠢ) , ᫨ , 㥬
⠢訩 墮⨪.    祭 u, v    ᪠
㥬 ⠭묨 (!) 祭 d(u/Z)/dsx, d(v/Z)/dsx, d(1/Z)/dsx;
ࠧ 祭 u/Z, v/Z, 1/Z  砫 ᪠ ,    
 ᪠ ⭠ ( 16 ᥫ,   ⪠),   
᪠       :

    uZ_b = uZ_a + length * duZ_dsx; //  u/Z, v/Z, 1/Z   ᪠
    vZ_b = vZ_a + length * dvZ_dsx;
    Z1_b = Z1_a + length * dZ1_dsx;

  룫拉  㤥 ਬ୮ ⠪:

    // ...
    current_sx = x_start;
    length = x_end - x_start;

    //  u/Z, v/Z, 1/Z, u, v  砫 ᠬ ࢮ ᪠
    uZ_a = uZ_start;
    vZ_a = vZ_start;
    Z1_a = Z1_start; //  1/Z
    u_a = uZ_a / Z1_a;
    v_a = vZ_a / Z1_a;

    // 㥬 ᪨  16 ᥫ
    while (length >= 16) {
      uZ_b = uZ_a + 16 * duZ_dsx; //  u/Z, v/Z, 1/Z, u, v   ᪠
      vZ_b = vZ_a + 16 * dvZ_dsx;
      Z1_b = Z1_a + 16 * dZ1_dsx;
      u_b = uZ_b / Z1_b;
      v_b = vZ_b / Z1_b;

      u = u_a; // 稭 ⥪஢  砫 ᪠
      v = v_a;
      du = (u_b - u_a) / 16; //  ᤥ >> 4, ᯮ fixedpoint
      dv = (v_b - v_a) / 16; //  ᤥ >> 4, ᯮ fixedpoint

      // 㥬 16 ᥫ   "䨭" ⮤
      len = 16;
      while (len--) {
        putpixel(current_sx, current_sy, texture[(int)v][(int)u]);
        u += du;
        v += dv;
        current_sx++;
      }
      length -= 16;

      //  ᪠ ⠭ 砫 ᫥饣 ᪠
      uZ_a = uZ_b;
      vZ_a = vZ_b;
      Z1_a = Z1_b;
      u_a = u_b;
      v_a = v_b;
    }

    // ᮢ뢠 "墮" , ᫨  
    if (length != 0) {
      uZ_b = uZ_a + length * duZ_dsx;
      vZ_b = vZ_a + length * dvZ_dsx;
      Z1_b = Z1_a + length * dZ1_dsx;
      u_b = uZ_b / Z1_b;
      v_b = vZ_b / Z1_b;

      u = u_a; // 稭 ⥪஢  砫 ᪠
      v = v_a;
      du = (u_b - u_a) / length;
      dv = (v_b - v_a) / length;

      // 㥬 ⮪ ᥫ   "䨭" ⮤
      while (length--) {
        putpixel(current_sx, current_sy, texture[v][u]);
        u += du;
        v += dv;
        current_sx++;
      }
    }
    // ...

   4.2, ன  ᪮   ᥬ ப ࠭,  
 "// ..." ⠢ ௮ 直 ⠬ [u/v/1]Z_start, ᮤ࠭
 ௮樨 u_start..  -  㤮, ⥪஢  ⮬ ᯥ⨢
࠭!

⠫ ᪠   ᫮  - ⨬樨.

-,     u  v  横 ᮢ  ( 㦭)
   -  tmp = 1/Z,  u = uZ * tmp, v = vZ * tmp.

-,   ⠬   ।  
祭 u  v  ᮢ । ᪠ ,   ⮣,
  ᠬ  , 㦭   u  v  *᫥饣* ᪠
㤥 室 ࠧ । ᮢ *⥪饣* ᪠.   ⮬ 砥
  ᯮ  ᮯ ६  ᮢ ᪠
  .   ⢥   㤥 
  堫! 稬 ᯥ⨢-४⭮ ⥪஢, ஥
(⥮᪨) 㤥 ࠡ   䨭.

-,   length  ᮢ 墮⨪   1  15
ᥫ    㬭  1/length, ࠭ ⠢ ⠡
 祭 1/length.

 ,  㣮쭨  ⥪஢ 䨭 ⮤, 
訥 - ⮤  ४樥.  㣮쭨  । 
   ᠬ  ਧ⠫쭮 :

    x_start = A.sx+(B.sy-A.sy)*(C.sx-A.sx)/(C.sy-A.sy),
    x_end = B.sx,
    longest_length = x_end - x_start,

 ࠢ   ⠥   du_dsx  duZ_dsx    .

4.4. ࠡ᪮
-------------------

 ⮤ ᭮  ਡ u, v 묨 㭪ﬨ - ࠡ,
 .   ப ந ਡ騥 u, v  㭪樨,
     ௮  ப.  ⮣  
 祭 u, v   窠 - 砫, ।   ப. 
⠥ 筮 ⠪ ,   4.3.

⠪,      祭 u  砫, ।   ப,
   ﭨ 0, length/2  length ᥫ  砫 ⮩ ப,
稬   ua, ub,  uc ᮮ⢥⢥.  ⠥ ਡ u
筮 㭪樥,   , 

    u = A*x*x + B*x + C,

 x - ﭨ  ⥪饩 窨  砫 ப. , ⠢ 
 ua, ub, uc  ᮮ⢥騥  x, 砥:

    ua = C
    ub = A*(length*length)/4 + B*length/2 + C
    uc = A*(length*length)   + B*length   + C

.. C = ua,   A  B  ⥬ ࠢ:

    A*(length*length)/4 + B*length/2 = ub - ua
    A*(length*length)   + B*length   = uc - ua

 ࢮ ࠢ  , ⥬   ஥:

    4*A*(length*length)/4 + 4*B*length/2 -
      A*(length*length    -   B*length = 4*(ub - ua) - (uc - ua),
    B*length = 4*(ub - ua) - (uc - ua),
    B = (4*(ub - ua) - (uc - ua)) / length.

 ࢮ ࠢ  , ⥬   ண:

      A*(length*length)   +   B*length -
    2*A*(length*length)/4 - 2*B*length/2 = (uc - ua) - 2*(ub - ua),
    A*(length*length)/2 = (uc - ua) - 2*(ub - ua),
    A = (2*(uc - ua) - 4*(ub - ua)) / (length*length).

稫   A, B, C.  ⥯ du  ddu.  ⥪饩 窨
x :

    du(x) = u(x+1) - u(x),
    du = (A*(x+1)*(x+1)+B*(x+1)+C) - (A*x*x+B*x+C) =
       = A*(2*x+1) + B

    ddu(x) = du(x+1) - du(x),
    ddu = (A*(2*(x+1)+1)+B) - (A*(2*x+1)+B) = 2*A

.., 砫 祭 u, du, ddu  ࠢ

    u   = C
    du  = A + B
    ddu = 2*A

   砫 祭 u, du, ddu ᫥⥫쭮 塞
祭 u   窥:

    u(0), du(0), ddu - 
    u(1) = u(0) + du(0), du(1) = du(0) + ddu
    u(2) = u(1) + du(1), du(2) = du(1) + ddu
    u(3) = u(2) + du(2), du(3) = du(2) + ddu
    ...

 v    筮.

 ࠧ, ᮢ ப 㤥 룫拉 ਬ୮ ⠪:

    // ...

    // ⠥ u, v  砫, ।   ப
    ua = uz_start / z1_start;
    va = vz_start / z1_start;
    ub = (uz_start + uz_end) / (z1_start + z1_end);
    vb = (vz_start + vz_end) / (z1_start + z1_end);
    uc = uz_end / z1_end;
    vc = vz_end / z1_end;

    // ⠥ 砫쭮 du  ddu
    pa = 2 * ((uc - ua) - 2 * (ub - ua)) / (length * length);
    pb = (4 * (ub - ua) - (uc - ua)) / length;
    pc = ua;
    u   = pc;
    du  = pa + pb;
    ddu = 2 * pa;

    // ⠥ 砫쭮 dv  ddv
    pa = 2 * ((vc - va) - 2 * (vb - va)) / (length * length);
    pb = (4 * (vb - va) - (vc - va)) / length;
    pc = v_a;
    v   = pc;
    dv  = pa + pb;
    ddv = 2 * pa;

    // 㥬 ᮪
    while (length--) {
      putpixel(current_sx, current_sy, texture[v][u]);
      u += du;
      v += dv;
      du += ddu;
      dv += ddv;
    }
    // ...

 ࠢ  ᯥ⨢-४ ⥪஢   
७ 横,  襥   ப ⢮ .  ua,
va      ᤥ    ,   length  
(length*length)    㬭  1/length  1/(length*length),
  祭  ࠭ ⠭ ⠡窨. ..,  ப 室
  ᨬ   . ⢮ - ਥ;  
⪨ ப  ᯮ짮   ௮, 筮 ⠪ ,
   砥  ᯥ⨢-४ ⥪஢. 砥 
७ᯮᮡ ⮤ ⥪஢.

5. ᢥ饭
============

5.1.  ᢥ饭
---------------------

ᢥ饭 ந쭮 ⮩ 窨 P,  - 筨 ᢥ,
饣   ஭ (omnilight)  饬 砥 㤥  
ࠢ :

    ambient = Ka,
    diffuse = Kd * cos(N, L),
    specular = Ks * pow(cos(R, V), Ns),
    intensity = ambient + amp * (diffuse + specular).

                 N
                 |
           L     |     R          V
            \    |    /        /
             \   |   /      /
              \  |  /    /
               \ | /  /
                \|//
    -------------P--------------

 ᯮ짮 ᫥騥 祭:
    Ka - 樥 䮭 ⥭ᨢ (ࠪ⨪ 㦠饩 ।)
    Kd - 樥 ﭨ (ࠪ⨪ 孮)
    Ks - 樥 ࠦ (ࠪ⨪ 孮)
    Ns - 樥  ࠦ (ࠪ⨪ 孮)
    amp - "魮" 筨 ᢥ
    P - ᬠਢ 窠
    N - ଠ  孮 ࠦ ꥪ  窥 P
    L - , ஢  筨 ᢥ   P ( ᢥ)
    V - , ஢  窨 P  " ७" 
    R - ࠦ  ᢥ (ࠦ L ⭮⥫쭮 N)
    ambient - "䮭" ᢥ饭
    diffuse - "ﭭ" ᢥ饭
    specular - "ࠦ" ᢥ饭
    intensity - ᢥ饭 (㬬ୠ)
    cos(A,B) - ᨭ 㣫  ࠬ A  B

 ࠢ   ⭮⥫쭮 ⮬ ᭥ - ᢥ饭
  ᪫뢠  䮭 ஢ ᢥ饭, ﭭ ( ᥬ
ࠢ -  ,   ࠢ )  ⮩ 窥 ᢥ 
筨  ࠦ (⮦  ) ᢥ  筨.

 筮,   ⮩ 㫥  쭮 ॠ १,
      窨 ࠭ ᫨誮 .

, ᨭ 㣫  ࠬ ⠥ 

    cos(A,B) = A*B/(|A|*|B|),

 A*B - ᪠୮ ந ஢, |A|  |B| -  . ⮬
    । ᯮ짮 ਢ   1, ⮣
ᨭ 㣫  ࠬ 㤥 ࠢ  ᪠୮ ந.
 ⨬.

5.2.  ଠ  ꥪ
-----------------------------

  㫠  ᢥ饭   ⠪   㤥 䨣஢
 N - ଠ  ꥪ  窥 P. ࠧ  ,   
  .

筮 ਤন ⠪ .    ⮨  ᪨ ࠭,
  ⪠ ᪨ ࠭ ਡ - ਢ ꥪ. ଠ
 ⮬ ਢ ꥪ    窥,   ᪨ ࠭
 ﭭ   祪 ࠭,  १   室  
࠭. ⮬ ଠ  ꥪ 筮 ਡ ᫥騬 ࠧ: 
ଠ  設,  ଠ  - 窥 ࠭  ௮
 設;    ௮  ࠭   न
ଠ.

ଠ  設 뢠  㬬 ਢ   1 ଠ 
ᥬ ࠭,   ਭ  設.  . 砫 ⠥
ଠ  ᥬ ࠭  ਢ    1. ,   設
 ॡ  ࠭,  ᫨ । ࠭ ᮤন  設, 
 ଠ  設 ਡ ଠ  ⮩ ࠭. ࢮ砫쭮 
ଠ  設  ࠢ묨 .     
  쭮 ,  筮 ஢  ࠭  ࠧ 
࠭  ⠭ ଠ  設.

 饩 ⭮ ਢ ᮪ ᥢ:

    // ...
    for (i = 0; i < numberOfVertics; i++) {
      vertexNormal[i].x = 0;
      vertexNormal[i].y = 0;
      vertexNormal[i].z = 0;
    }
    for (i = 0; i < numberOfVertics; i++) {
      for (j = 0; j < numberOfFaces; j++) {
        if (face[j].vertex0 == i ||
            face[j].vertex1 == i ||
            face[j].vertex2 == i)
        {
          vertexNormal[i].x += faceNormal[j].x;
          vertexNormal[i].y += faceNormal[j].y;
          vertexNormal[i].z += faceNormal[j].z;
        }
      }
    }
    // ...

5.3. ᢥ饭  
--------------------------

, , ᠬ ᨫ쭮 饭 , ஥  ਤ㬠.
 ⠪ ।:
    - V  ᨫ쭮   P, .. V ਭ ﭭ  ᥩ ࠭
    - L  ᨫ쭮   P, .. L ਭ ﭭ  ᥩ ࠭
    - Ks = 0 (  ࠭  ࠦ ᢥ,  ⮫쪮 ᥨ)
    - ଠ  ꥪ N ࠢ ଠ  ࠭ n   窥 ࠭ P

 ⮬ 砥 㫠 ਭ 

    intensity = ambient + amp * cos(n, L),

 n - ଠ  ࠭.

祬  ⮩ 㫥,  ।,  稭,   P. 
 ᢥ饭 ࠢ ⠭  ᥩ ࠭,    窨 ࠭
ᢥ饭 .  筮     ࠧ  ࠭.
⠫ 㯮,  ᢥ饭   筮 ਭ 뢠 flat
shading.

5.4. ᢥ饭  
----------------------

  ⠪ ।:
    - Ks = 0 (  ࠭  ࠦ ᢥ,  ⮫쪮 ᥨ)
    - ᢥ饭   ࠭ 

,  ࠧ ᢥ饭   - ⠪ ,   न ⥪
u, v -  ᯮ짮 筮 ⠪  楤,   ண ண
⥪஢, ⮫쪮   न ⥪ u, v   㤥
௮஢  稭 - ᢥ饭.  設  ⠥ 
⮩  ᠬ 㫥 ( ⮬ Ks = 0, 筮),

    intensity = ambient + amp * cos(N, L).

  N  設   ࠧ ଠ  ꥪ  設 (vertex
normal), ⠭ ⠪,  ᠭ  5.2.

 ,  ᠭ 楤 ᢥ饭   筮  
窨  ᢥ饭 (  㤥 c)  設 ࠭ 
ਢ  㫥    ᢮ 楤 ⥪஢ u 
c, 모  ⮬ v (   㦭,   ⮫쪮 c). ⮡
 ᢥ饭    ⥪஢, , ᮮ⢥⢥, 
 ᪮஢   u  c.    祭 
梥  १ (u, v)  ⥪ ᥫ  ᢥ饭 , ᠭ 
ᮮ⢥饬 㭪.

⨬,  ᢥ饭   -    ௮ ᢥ饭
 ࠦ ࠭  ࠭,   筮 ਭ    .
ᢥ饭    嬥୮ ࠭,      ஥樨.
 ,  ,   ⮦  뢠 ᯥ⨢. ࠢ,
  ᢥ饭  ࠢ  묨,  룫拉 ⨭,
ᢥ饭    ⮬ ᯥ⨢, 㤥   ४⭥.

5.5. ᢥ饭  
-----------------------

 ਭ ,  , ⠪ ।:
    - Ks = 0 (  ࠭  ࠦ ᢥ,  ⮫쪮 ᥨ)

-,    訡. ࠪ᪨  筮 ᯮ㥬 ( demo
 襩 ) ⮤ .. "ᢥ饭  "  뢠 ࠦ
 ᢥ饭.

 㤥 ᪠  ᠬ, ୮, ୮ ⮤ ᢥ饭 
,  ᢮ ᢥ饭  ⥪஢  । ⥪.

 ⮤   ⠪  ।:
    - L - ⠭ (   筨, 㤠 ᪮筮 )
    -  筮 ଠ  ꥪ  ௮樨  設
      ࠭  

 , ⢥ত,  ᫨  設 ଠ  ꥪ   1,
  ௮樨 ⮩ ଠ  設  - ࠭  㤥
   窥 ଠ ⮩  ᠬ  1.  ᠬ   
  ⠪,   ᨫ쭮 ࠧ 㣫  ଠ ਡ⥫쭮
୮.

  Ks = 0,   N  । ࠢ 1  ᥩ ࠭, :

    intensity = ambient + amp * (N * L).

ᬮਬ 饭 砩,   L = (0,0,1). 騩 砩 
 ᮡ ᫨⥫  ਢ  ⮬ 饭,  - 㤥
᪠  .  ,  ⮬ 砥

    intensity = ambient + amp * (N.x * L.x + N.y * L.y + N.z * L.z) =
              = ambient + amp * (N.x * 0 + N.y * 0 + N.z * 1) =
              = ambient + amp * N.z =
              = ambient + amp * sqrt(1 - (N.x * N.x + N.y * N.y)).

  ⥭ᨢ ࠦ १ N.x, N.y,   稭 
. N.x  N.y   - ᫠  饩 ⮩  -1  1 (.. 
 ࠢ 1), ௮஢  - ⨥ ,  ७ 
ࠧ  ᥫ ⮦  . ⮬  ௮樨 N.x  N.y 筮
௮, ਬ, 128*(N.x+1)  128*(N.y+1), 祬 㦥  楫
᫠.    祭 ⠪ ࠧ ⬠⠡஢ N.x,
N.y -  0, 1, ..., 255. ⮬  ࠭  ⠡ 祭
intensity    ⬠⠡஢ N.x, N.y.

 ,   ௮㥬 128*(N.x+1)  128*(N.y+1) ( 祭
 ⮦ , ࠧ N.x, N.y  )     ⠡
।塞 ⥭ᨢ.    ⥪஢, ⮫쪮  ⢥
⥪ ᯮ ⠡ ᢥ饭 ࠧ஬ 256x256 ( 
㣨),   ⢥ न ⥪ u, v   設 
⬠⡨஢ न ଠ  ⮩ 設.

, ᮣ᭮ ᥣ 㯮⮣, ⠥ ⠪:

    // ...
    for (i = 0; i < 256; i++) {
      for (j = 0; j < 256; j++) {
        r =
          pow((i - 128) / 256.0, 2) +  //  N.x*N.x
          pow((j - 128) / 256.0, 2);   //  N.y*N.y
        if (r > 1) r = 1; //  N  1, ⮬ r > 1   
        phongTable[i][j] = amp * sqrt(1 - r);
      }
    }
    // ...

ࠢ, 筮 ᯮ  -  - ⠡, ,  
- 樨 直 訡 ਧ樨...  룫
⢨⥫쭮 . ⠥  ⠪:

    // ...
    for (i = 0; i < 256; i++)
      for (j = 0; j < 256; j++)
        phongTable[i][j] =
          amp * pow(sin(i * PI / 256) * sin(j * PI / 256), 4);
    // ...

   ⠫ ⮫쪮 ਢ 祪   ᫥
न  ⮩ ⠡:

    // ...
    len = N.x * N.x + N.y * N.y + N.z * N.z;
    N.x /= len; //  砩, ᫨  N  ࠢ 1
    N.y /= len;
    N.z /= len;
    u = (1 + N.x) * 128; // ᮡ⢥  न
    v = (1 + N.y) * 128;
    // ...

 ୥    ⮬,  ਢ 砩  ந ஬
ᢥ饭  ⮫쪮  ᬮ७,  L = (0,0,1).   த 
.  ਬ  ଠ  設  , ᮢ騩 
ந  ᢥ  ஬ (0,0,1). ୮ ந  ⮬
 , ⮬ ⠪  . ,  ᫥ ⮣  㦥 
⮫쪮  ᯨᠭ 饭 砩.

  ଠ   設  ॡ ࠪ᪨  
 ᫥饩 稭.  ᠬ  ᥡ, 筮, 筮 
楤  ୮ ६ ꥤ.     饭 
 ꥪ   ࠢ  㤥 ᮮ⢥⢥ 稢 ଠ. 
,     ᮢ  . ᫨ ᯮ짮 ,
   ᮢᥬ  - 筮 ६ ( 㦭 浪!)
 ᮡ⢥  ꥪ,  室  ந쭮
  襩 "⠭⭮"    室  ந쭮
 ᢥ  "⠭⭮"  ᢥ (0,0,1). ..  
⮩  室   筮 㬭  ꥪ,   㦥 .

6. 
=========

6.1.  ᮢ ⥪  ᢥ饭
----------------------------------------

० ᥣ,  ⥮ਨ.    ,   梥
ᥫ  ⠢騬 (r,g,b)  ᢥ饭 梥⮬ (light_r,light_g,light_b)
⠥ 

     result_r = r * light_r / max(light_r);
     result_g = g * light_g / max(light_g);
     result_b = b * light_b / max(light_b);

 max(light_r) -  ᨬ쭮  祭  light_r. 
ᨬ쭮  ᥬ ⥬ ࠤ ᢥ饭,   ᯮ㥬,  
ᨬ쭮    ࠤ権. ਬ, ᫨   祭 
light_r    0  255,  ⥪騩 筨 ᢥ  梥 (30,
40,50),  ᮮ⢥⢥ ࠤ樨 ᢥ饭  ࠢ (k*30,k*40,k*50),
 0 <= k <= 1,  max(light_r) = 255,   30.  ⠭ ᭥,
   ⭠  ⭠  ᥬ .

6.1.1. 256-梥 ०
~~~~~~~~~~~~~~~~~~~~~~~~~
⮤ 1: ࠭  ⠡, ॢ  (梥, ᢥ饭) 
梥.    ,  ᪠    (梥, ᢥ饭)
訬 ࠧ ਡ騩  梥;   ( ᠭ  demo.design
FAQ)    ᣥ஢   true color ⨭ 256x256, 
ன ᥫ (x, y) ᮢ 梥⮬ (㦥 true color!), ᮮ⢥騬
梥 x  ᢥ饭 y,  ⮬ ॢ  祬- ⨯ Image Alchemy
 256 梥⮢. ᫥ 祣 ᯮ짮  稢襩 ⨭,  
⢥ ⠡ (colorTable) 㤥 ᠬ 稢 ⨭:

    outputColor = colorTable[intensity][color].

⮤ 2: ᫨  ந ᯮ짮  梥⮢  ࠤ権 ᢥ饭,
 ⮣       ࠤ樨  ᯮ㥬
梥⮢.  । 㦭    -   㬭,
  - ᤢ,   ᫮. ਬ:     8 梥⮢  32
ࠤ樨 ᢥ饭.  塞 ⠪: 32 ࠤ樨 ࢮ 梥,
ண, ..., 쬮.  ( ⮣ ਬ)

    outputColor = (color << 5) + intensity.

6.1.2. 24/32- ०
~~~~~~~~~~~~~~~~~~~~~~~~~~
   ⥬  ᠬ묨 ⠡栬. 쪮 ⠡ ॢ 
梥  梥,   梥   梥.  , ᮧ
⠡ redShades[numShades], greenTable[numShades], blueTable[numShades],
 ⮬     ᥫ  㦭 ࠤ樨 ᢥ饭
 ⮩ ⠡ ।塞 室 祭 :

    r = redShades[intensity],
    g = greenShades[intensity],
    b = blueShades[intensity].

    ० -  ⤥ , ⮬ 
஡  .

6.1.3. 15/16- ०
~~~~~~~~~~~~~~~~~~~~~~~~~~
⮤ 1: 㯮,  ⢥. ᯮ짮  ⠡    
  樨 梥  ࠤ樨 ᢥ饭.   ᮢᥬ
 쪠, ࠧ஬ 65536*32 = 2 .  ᠫ  32, ⮬ 
  ०   ⢮  5  ( ᪫祭 6-⭮
   16-⭮ ०),    ࠤ権 ᢥ饭,
祬 32, ᫥.

⮤ 2:   ⠪ ,   24/32- ०. ஡ 
- ⮣,  ਤ  㪠 뤨 㦭 ᪮쪮  
 ᥫ.     ࠭ ᤥ  ᥬ 㦭묨
ᤢ, .. 祭 ⮢ ⠡   ⠪ :

    000bbbbb          - ᨭ, 8 
    00000gggggg00000  - , 16 
    rrrrr000          - , 8 

  梥 ⠥ ਬ୮ ⠪:

    outputColor =
      (redTable[(color >> 10) & 0x2F] << 8) +
      greenTable[(color >> 5) & 0x1F] +
      blueTable[color & 0x1F].

 ᥬ  , , ॥ -  ᨢ. ਬ୮ ⠪:

    ; ...
    mov  bx,color
    shr  bx,10
    and  bx,02Fh
    mov  ah,redTable[bx]
    mov  bx,color
    and  bx,01Fh
    mov  al,blueTable[bx]
    mov  bx,color
    shr  bx,5      ;   
    and  bx,01Fh   ;   shr  bx,4
    shl  bx,1      ;   and  bx,02Eh
    or   ax,greenTable[bx]
    mov  outputColor,ax
    ; ...

⮤ 3: ᮢ   24/32-, ᢥ饭 ᮮ⢥ᢥ  ⥪ன
ᮢ  㭪 6.1.2,  ⮬ ।⢥  뢮  ࠭ 
८ࠧ  24/32-  15/16.  ᯮ짮 PTC  ।⠢
 㦭 ८ࠧ  . PTC -  ⠪ ᪠ ⥬
 C++,     http://www.gaffer.org/ptc.

6.2. 㡯ᥫ쭠 筮
---------------------------

㡯ᥫ쭠 筮 砥 ᫥饥: ⮫쪮  ᥫ, 業 
   㣮쭨,   ᮢ.  ᠬ ,
 ⮬ ।  ᯮ짮  (䨪஢)  
ᥫ, ⢥ ᫥⢨ ⮣ 㤥 ᤢ ᥣ ࠭ , 祬
 0.5 ᥫ.

室  㡯ᥫ쭮 筮  ⮫쪮 - ⮣, 
ᯫ ,   ᥫ.   ⠭ ᥫ ( 
祬  ࠧ襭), ⥬    筮.  ࠧ 
⢮   ࠧ襭 浪 1280x1024,  ⥬   
 3D engine 320x200  640x480.

 㡯ᥫ 筮  । . ।⠢ ᥡ, 
 㥬 ࠭.  稭 ᮢ   - (楫) start_y, ⠪
  ८ࠧ (ਬ, ஥஢)    饬 砥 
   楫 ᫠. 筮     㣫.  
⨦ 㡯ᥫ쭮 筮 筮   "ᤢ" ࠭ 
( , ࠧ ᮡ 让 )  ࢮ 楫 祭 start_y, 
ᮮ⢥⢥  न 砫   ப ࠧ⪨ sx_start,
sx_end. 筮 sx_start  sx_end   ௮  
ࠤ⮢ dx_start, dx_end.    ⮬ 砥 筮  
sx_start, sx_end,  ௮㥬 祭   ⮬᪨:

    // ...
    sx_start += dx_start * (ceil(start_y) - start_y);
    sx_end += dx_end * (ceil(start_y) - start_y);
    // ...

   ᤢ 砫 न x   殢 ᮮ⢥⢥
⮬, ᪮쪮 砫쭮 y ⮨   ᢮ ப ࠧ⪨.  
ᠬ   ᤥ   ᥬ ⠫묨 ६묨,  
㤥 ⥯஫஢  ॡࠬ (ਬ u, v, ⥭ᨢ  ):

    // ...
    u_start += du_start * (ceil(start_y) - start_y);
    u_end += du_end * (ceil(start_y) - start_y);
    // ...

 , ࠧ㬥, ᮢ 稭   ப ceil(start_y).

  .  ᪮ ࠡ    ,  ࠭ ࠧ 
  ⨢ ஦  ६饭, ᮡ ᨫ쭮  ⭮ 
쪨  (  ࠤ).

6.3. ⥪ᥫ쭠 筮
---------------------------

⥪ᥫ쭠 筮 ᨫ쭮 ᬠ娢  㡯ᥫ. 室  
 - ᫥饣 䠪: ᮢ ப  稭  -
楫 sx,   楫 ᥫ. - ⮣ (sx  ""  ।
 ᥫ   !)  ஦ ⥪ ਬ୮  
ᠬ ᥫ. ࠭  筮 ⠪  ᤢ,    㡯ᥫ쭮
筮,   । ᮢ ப ४ 砫 祭
稭, ௮㥬  ப (u, v, ᢥ饭...):

    // ...
    u_start += du_dsx * (ceil(sx) - sx);
    v_start += dv_dsx * (ceil(sx) - sx);
    // ...

 㦥   ࠡ ( 稭 浪 5-10%),  襭
⢠ ⨭ ⮣ ⮨. ஬ ⮣, ⥪ᥫ 筮  
ᮢ  2D-祭   祭, ஥  ꥤ 
ᮢ    ࠡ. .

6.4.  3D    㬭
------------------------------------------

筮  3D   㬭     .
  ॡ 9 㬭  6 ᫮.   ᯮ짮 讣
precalculation (।⥫쭮 )   ᪮쪮 ᪮.

   㬭 - ப  (a,b,c)   (x,y,z).
   ࠢ

    r = a*x+b*y+c*z.

   ࠧ  3 㬭  2 ᫮   ப.   㣮
஭,

    r = a*x+b*y+c*z = (a*x+b*y+a*b+x*y)+c*z-a*b-x*y =
      = (a+y)*(b+x)+c*z-a*b-x*y.

  㫠   룫廊.    ⮬,  x*y -  ﭭ
稭, ⠪  x, y -  न 設 ⮣ ꥪ,  
筮  .  a*b 筮     ,
  ⮦ ﭭ 稭   . ..

    r = (a+y)*(b+x)+c*z-c1-c2.

 १  2 㬭  4 ᫮   ப,    ᠬ
6 㬭  12 ᫮  . 먣ࠫ 3 㬭 業 6 ᫮.

6.5.  䨫 ⥪
----------------------------------

-,    ⮤,   ண ᬠ뢠 ⥪ 直
᪮⥫ ⨯ 3Dfx. ⠪,     - ⥪.  
 -  2D ⨭,  2D ⨭  ᢮ । -  ஢ 梥
१ - ஬⪨.  ॠ쭮   梥   ᪠窮
१ , ਬ, ,   - 뢭 㭪樥
 , 祬  쭮 .  筮 ⥪஢
 砥 न  ⥪, 㣫塞   襣 楫 ᫠
 롨ࠥ 㦭 梥  ⥪.      ६ 祭 梥
 ᠬ   㥬 窥 ⪨ ஢ 梥, ⮬   梥
१ , ⠢ 뢭  㧫 ⪨, ⮬ 
䥪  ⮢.

  䨫樨 梥 ᥣ-ᥣ  ௮ 
㧫 ⪨ ஢.  .   ⥪饩 窥   稫
न ⥪ u, v - - 楫,  , ᫠. 
 楫  u, v ।,   㧫 ⪨ (᫨ 㣮,
  ᥫ ⥪) 室  窠,   ஡ - 
  室    㧫.  ⨭.

    1------------2
    |            |
    a    *       b
    |            |
    |            |
    |            |
    3------------4

 1, 2, 3, 4 - "㦠騥"  ᥫ ⥪ (  㧫 ⪨
 梥).  iu, iv - 楫  न ⥪ 窨 u, v; fu,
fv - ஡ .  1, 2, 3, 4  न  ⥪ (iu,iv),
(iu+1,iv), (iu,iv+1), (iu+1,iv+1). ந௮㥬 - 
梥 (R, G  B)   1-3  2-4:

    a.c = 1.c + (3.c - 1.c) * fv;
    b.c = 2.c + (4.c - 2.c) * fv;

 

    a.c = c[iu][iv] + (c[iu][iv+1] - c[iu][iv]) * fv;
    b.c = c[iu+1][iv] + (c[iu+1][iv+1] - c[iu+1][iv]) * fv;

 ந௮㥬 梥  אַ ab  襩 窥:

    c = a.c + b.c * fu;

ந௮஢  ⮩ 㫥   梥, 稬 
⮢ १ - 梥 窨,  㦥  ⮬  䨫樨.

   稫   㬭  .    㬬 
㬭  ᥫ. , 筮, ⭮   ⨬ 㫠, 
 㬭   ᥫ.     㬭 
롮ન  ⠡. u, v 筮 -  fixedpoint; fu, fv - ⮦ (, 
砥  fixedpoint 楫  ஡   ஢  and').
  ᯮ㥬 24- 梥  16:16 fixedpoint; ⮣  
梥  8 ,  ஡    ᤢ ॢ  24:8
fixedpoint. 砥 256  祭    梥  256
 祭  ஡ ,   - ⠡窠 256x256. ᫨ 梥
15/16-,  ᯮ  㡮 (᪠,   ) 㣫
஡ ,  ⠡窠 ⠭  . , 筮,  ,
 -   १, ⠪  祬  lookup-⠡, ⥬ 
  ᪮.   .

⠫ ⮫쪮 㯮,     ⠡  ,  ᫮,
  ਬ  㤥 8:8 fixedpoint,  ᪫뢠  १
⮦  ᫮,  ⮬ ᤢ ॢ ⭮  楫 ᫠. 
(ᮡ  砥 15/16- ०) 㤥 ⥭ 让  
⥪, 騩 - 訡 㣫.

6.6.  " 㡨"  樨 孮⥩
-----------------------------------------------------------------

騩 ᪨ ନ - marching cubes algorithm; ਢ ,
⠪ ᪠, just to avoid any confusion.  ।祭  ண
஥ 쭮  孮 嬥୮ ᪠୮ ,
 祭ﬨ  ࠢ୮ ⪥. ࠦ   ,
,   몮,   㦥  ண ஥
 㣮 ࠭, 筮  ਡ饣 孮,
  ⠪ 孮,  ன । 㭪 ࠢ -
⠭ - ஢. ਬ,  ࠤ 1  業஬  㫥 - 
孮 㭪樨 f=1/(x*x+y*y+z*z)  ஢ 1. .. "3D ",
⮫  뭥, ⮦  孮, ࠢ,  
᫮ 㭪樨 (, 㭪   嬥୮ ࠭⢥):

         n
    f = sum c[i]/((x[i]-x)*(x[i]-x)+(y[i]-y)*(y[i]-y)+(z[i]-z)*(z[i]-z)),
        i=1



    n - ⢮ 筨  ();
    c[i] - ⥭ᨢ  筨 (ࠤ 쪨);
    x[i], y[i], z[i] - न  筨 (業 쪨).

⠥  ᫥騬 ࠧ.

ᬠਢ - ࠫ,  ண  室
孮 (   ,   ⨬ ᮢ). 
 ⪮, ,   ࠧ१   ᪮쪮  ࠫ,
 ⠥ 祭 㭪樨 ()  㧫 ⪨,   設  ᠬ
쪨 ࠫ.  襩 ᭮    ᫮
"ࠫ"  ᫮ ""  ।⠢ ᥡ 㡨 㡨. 
室  ᥬ 㡨 (    ᯮ짮 ᫮ "㡨",
 "ࠫ" ). ਬ  祭 㭪樨  設
㡨. ᫨    ( ) ஢ - , 㡨 室
楫  ( ) 孮,  ⮣ 㡨 孮  
   뢠. ᫨   ,   ,  
ॡ 㡨 ᥪ  孮.  ௮樥 ਡ
 窨 祭   ᨬ  ⮣,  設 室 
孮,   , 㥬 ᪮쪮 㣮 ࠭. 
設  ࠭ -   ࠧ 窨 祭 孮  ॡࠬ.
 ஢ ࠭  祭  ॡ  孮 ,
ᬮਬ  ⠡,     ⮣,  設 室 
孮,   - . 設 ᥬ, ﭨ  -   . 
  256  ᯮ, ⠪  ⠡  ⠪   .
  ⠡ ⮦  ᮢᥬ : ᫨ 設 室
 孮, ⠭ ᮮ⢥騩 ⮩ 設  ,
 - 뢠.

 ⥭쪨 ਬ.

        4--------3
      / |      / |
    1--------2   |
    |   |    *   |
    |   8----|---7
    | /      | *
    5---*----6

 窠 6 室  孮, ⠫ - .  孮
室 १ 窨 (*), ਡ   ௮樥  ஢
१  㣮 ࠭.  ॡ ᥪ  孮, 
窨 筨   ᮥ - 㧭  ⠡  ;  
砥  ࠢ 11011111b=0DFh (⠭  , ஬ 6).

  蠣:
    *  祭 㭪樨  㧫 ⪨ (設 㡨)
    *   㡨:
       -   ⮣ 㡨  ⠡.   ᮮ⢥
         -  設, ᫨   祭 㭪樨  ஢,
           ⠭  ,  - 
       -   ⠡   㡨 ᫮,    ஬
         ।, ᥪ  ᮮ⢥饥  () ॡ 㡨
         孮,  . ᫨ ,   ( 
         ௮  ᮮ⢥騬 ॡ 設) न
         窨 祭
       -   ⠡   㡨 ᫮ 㥬 ࠭ 
         ᮡ⢥ ன ஢ ॡ, (㦥 ⠭) 祭
           孮   設 㦭 ࠭

⭮ 㯮訥 ᪨ ⠡ ਢ  ਬ稪, ⠬
 ਢ ᮪ ,  쭮  ।  ᢮ engine.
ਬ   http://www.mhri.edu.au/~pdb/modelling/polygonise, ᠬ  ᥡ
 ஢  㤥,   ⠬ ᠭ ࠢ쭮   訡
 ⠡  (⠪   訡  ᢮ ).