Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; Ôóíêöèè äëÿ èçìåíåíèÿ âîêñåëüíîé òàáëèöû.
  3. ; Â âîêñåëüíîé òàáëèöå ñîäåðæàòñÿ 8 öèôð,
  4. ; êîòîðûå çàäàþò íàïðàâëåíèå äëÿ ðàñïîëîæåíèÿ
  5. ; äî÷åðíèõ âîêñåëåé. Èçìåíÿÿ öèôðû â ýòîé òàáëèöå
  6. ; ìîæíî ïîëó÷èòü ïîâîðîòû è çåðêàëüíûå îòîáðàæåíèÿ
  7. ; âîêñåëüíîãî èçîáðàæåíèÿ.
  8. ;
  9. ; Ñõåìà íóìåðàöèè óãëîâ â òàáëèöå:
  10. ;     4
  11. ; 5       6
  12. ; |   7   |
  13. ; |   0   |
  14. ; 1       2
  15. ;     3
  16. ; ãäå:
  17. ; 0-1 îñü x
  18. ; 0-2 îñü y
  19. ; 0-4 îñü z
  20.  
  21. ; ïîâîðîò âîêðóã îñè z
  22. align 4
  23. proc vox_obj_rot_z uses eax ebx ecx, v_obj:dword
  24.         mov ebx,[v_obj]
  25.         add ebx,vox_offs_tree_table
  26.  
  27.     ;(1)
  28.     call vox_tbl_copy
  29.  
  30.     ;(2)
  31.     ;0 -> 1   4 -> 5
  32.     ;^    |   ^    |
  33.     ;2 <- 3   6 <- 7
  34.  
  35.     mov edx,dword[eax]
  36.     mov byte[eax+1],dl ;0->1
  37.     mov byte[eax+3],dh ;1->3
  38.     shr edx,16
  39.     mov byte[eax],dl   ;2->0
  40.     mov byte[eax+2],dh ;3->2
  41.  
  42.     mov edx,dword[eax+4]
  43.     mov byte[eax+5],dl ;4->5
  44.     mov byte[eax+7],dh ;5->7
  45.     shr edx,16
  46.     mov byte[eax+4],dl ;6->4
  47.     mov byte[eax+6],dh ;7->6
  48.  
  49.     ;(3)
  50.     call vox_tbl_paste
  51.  
  52.         ret
  53. endp
  54.  
  55. ; ïîâîðîò âîêðóã îñè y
  56. align 4
  57. proc vox_obj_rot_y uses eax ebx ecx, v_obj:dword
  58.         mov ebx,[v_obj]
  59.         add ebx,vox_offs_tree_table
  60.  
  61.     ;(1)
  62.     call vox_tbl_copy
  63.  
  64.     ;(2)
  65.     ;0 -> 4   1 -> 5
  66.     ;^    |   ^    |
  67.     ;2 <- 6   3 <- 7
  68.  
  69.         mov edx,dword[eax]
  70.         mov ecx,dword[eax+4]
  71.  
  72.         mov byte[eax+4],dl ;0->4
  73.         mov byte[eax+5],dh ;1->5
  74.         shr edx,16
  75.         mov byte[eax+0],dl ;2->0
  76.         mov byte[eax+1],dh ;3->1
  77.  
  78.         mov byte[eax+6],cl ;4->6
  79.         mov byte[eax+7],ch ;5->7
  80.         shr ecx,16
  81.         mov byte[eax+2],cl ;6->2
  82.         mov byte[eax+3],ch ;7->3
  83.  
  84.     ;(3)
  85.     call vox_tbl_paste
  86.         ret
  87. endp
  88.  
  89. ; ïîâîðîò âîêðóã îñè x
  90. align 4
  91. proc vox_obj_rot_x uses eax ebx ecx, v_obj:dword
  92.         mov ebx,[v_obj]
  93.         add ebx,vox_offs_tree_table
  94.  
  95.     ;(1)
  96.     call vox_tbl_copy
  97.  
  98.     ;(2)
  99.     ;0 -> 4   2 -> 6
  100.     ;^    |   ^    |
  101.     ;1 <- 5   3 <- 7
  102.  
  103.         mov edx,dword[eax]
  104.         mov ecx,dword[eax+4]
  105.  
  106.         mov byte[eax+4],dl ;0->4
  107.         mov byte[eax+0],dh ;1->0
  108.         shr edx,16
  109.         mov byte[eax+6],dl ;2->6
  110.         mov byte[eax+2],dh ;3->2
  111.  
  112.         mov byte[eax+5],cl ;4->5
  113.         mov byte[eax+1],ch ;5->1
  114.         shr ecx,16
  115.         mov byte[eax+7],cl ;6->7
  116.         mov byte[eax+3],ch ;7->3
  117.  
  118.     ;(3)
  119.     call vox_tbl_paste
  120.         ret
  121. endp
  122.  
  123.  
  124. ;input:
  125. ; ebx = vox_offs_tree_table
  126. align 4
  127. vox_tbl_copy:
  128.     ;(1)
  129.     mov eax,txt_buf
  130.  
  131.     movzx ecx,byte[ebx]
  132.     add ecx,eax
  133.     mov byte[ecx],0
  134.  
  135.     movzx ecx,byte[ebx+1]
  136.     add ecx,eax
  137.     mov byte[ecx],1
  138.  
  139.     movzx ecx,byte[ebx+2]
  140.     add ecx,eax
  141.     mov byte[ecx],2
  142.  
  143.     movzx ecx,byte[ebx+3]
  144.     add ecx,eax
  145.     mov byte[ecx],3
  146.  
  147.     movzx ecx,byte[ebx+4]
  148.     add ecx,eax
  149.     mov byte[ecx],4
  150.  
  151.     movzx ecx,byte[ebx+5]
  152.     add ecx,eax
  153.     mov byte[ecx],5
  154.  
  155.     movzx ecx,byte[ebx+6]
  156.     add ecx,eax
  157.     mov byte[ecx],6
  158.  
  159.     movzx ecx,byte[ebx+7]
  160.     add ecx,eax
  161.     mov byte[ecx],7
  162.     ret
  163.  
  164. ;input:
  165. ; ebx = vox_offs_tree_table
  166. align 4
  167. vox_tbl_paste:
  168.     movzx ecx,byte[eax]
  169.     add ecx,ebx
  170.     mov byte[ecx],0
  171.  
  172.     movzx ecx,byte[eax+1]
  173.     add ecx,ebx
  174.     mov byte[ecx],1
  175.  
  176.     movzx ecx,byte[eax+2]
  177.     add ecx,ebx
  178.     mov byte[ecx],2
  179.  
  180.     movzx ecx,byte[eax+3]
  181.     add ecx,ebx
  182.     mov byte[ecx],3
  183.  
  184.     movzx ecx,byte[eax+4]
  185.     add ecx,ebx
  186.     mov byte[ecx],4
  187.  
  188.     movzx ecx,byte[eax+5]
  189.     add ecx,ebx
  190.     mov byte[ecx],5
  191.  
  192.     movzx ecx,byte[eax+6]
  193.     add ecx,ebx
  194.     mov byte[ecx],6
  195.  
  196.     movzx ecx,byte[eax+7]
  197.     add ecx,ebx
  198.     mov byte[ecx],7
  199.     ret
  200.