Advertisement
jig487

polyDrawingMonitor_API_thing

Sep 4th, 2021 (edited)
1,136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 3.48 KB | None | 0 0
  1. --CODE BY JIG487
  2.  
  3. local function drawFlatTriangle(peripheralWrapper,px1,px2,y,color)
  4.     local xStart = math.ceil(px1 - 0.5)
  5.     local xEnd =   math.ceil(px2 - 0.5)
  6.  
  7.         --only draw positive coordinates
  8.     for x = xStart, xEnd do
  9.         if y > 0 and x > 0 then
  10.             peripheralWrapper.setCursorPos(x,y)
  11.             peripheralWrapper.setBackgroundColor(color)
  12.             peripheralWrapper.write(" ")
  13.         end
  14.     end
  15. end
  16.  
  17. local function drawFlatTopTriangle( peripheralWrapper,vec1,vec2,vec3,color)
  18.         --Calculate slopes in screen space
  19.         --Run over rise so we don't get infinite slopes
  20.     local m1 = (vec3.x - vec1.x) / (vec3.y - vec1.y)
  21.     local m2 = (vec3.x - vec2.x) / (vec3.y - vec2.y)
  22.  
  23.         --Calculate start and end scanlines
  24.     local yStart = math.ceil(vec1.y - 0.5)
  25.     local yEnd =   math.ceil(vec3.y - 0.5)-1 --the scanline AFTER the last line drawn, which is why it's offset by -1
  26.  
  27.     for y = yStart, yEnd do
  28.         --calculate start and end x's
  29.         --Add 0.5 because we're calculating based on pixel centers
  30.         local px1 = m1 * (y + 0.5 - vec1.y) + vec1.x
  31.         local px2 = m2 * (y + 0.5 - vec2.y) + vec2.x
  32.  
  33.         drawFlatTriangle( peripheralWrapper,px1,px2,y,color)
  34.     end
  35. end
  36.  
  37.     --refer to drawFlatTopTriangle for comments
  38. local function drawFlatBottomTriangle( peripheralWrapper,vec1,vec2,vec3,color)
  39.     local m1 = (vec2.x - vec1.x) / (vec2.y - vec1.y)
  40.     local m2 = (vec3.x - vec1.x) / (vec3.y - vec1.y)
  41.     local yStart = math.ceil(vec1.y-0.5)
  42.     local yEnd =   math.ceil(vec3.y-0.5)-1
  43.     for y = yStart, yEnd do
  44.         local px1 = m1 * (y + 0.5 - vec1.y) + vec1.x
  45.         local px2 = m2 * (y + 0.5 - vec1.y) + vec1.x
  46.         drawFlatTriangle( peripheralWrapper,px1,px2,y,color)
  47.     end
  48. end
  49.  
  50.     --Draws a solid triangle from 3 vectors with an X and a Y
  51.     --Splits up the triangle into 2 triangles: a flat top and a flat bottom.
  52.     --Takes in a peripheral wrapper, 3 vectors, and a color to draw the whole thing as.
  53. local function drawSolidTriangle( peripheralWrapper,vec1,vec2,vec3,color)
  54.    
  55.         --using pointers so we can swap (for sorting purposes) probably don't need this b/c lua? idk
  56.     local pv1 = vec1
  57.     local pv2 = vec2
  58.     local pv3 = vec3
  59.  
  60.         --Sort vertices by y
  61.     if pv2.y < pv1.y then pv1,pv2 = pv2,pv1 end
  62.     if pv3.y < pv2.y then pv2,pv3 = pv3,pv2 end
  63.     if pv2.y < pv1.y then pv1,pv2 = pv2,pv1 end
  64.  
  65.     if pv1.y == pv2.y then --Natural flat top
  66.             --Sort top vertice by x
  67.         if pv2.x < pv1.x then pv1,pv2 = pv2,pv1 end
  68.         drawFlatTopTriangle(peripheralWrapper,pv1,pv2,pv3,color )
  69.  
  70.     elseif pv2.y == pv3.y then --Natural flat bottom
  71.             --Sort bottom vertice by x
  72.         if pv3.x < pv2.x then pv3,pv2 = pv2,pv3 end
  73.         drawFlatBottomTriangle(peripheralWrapper,pv1,pv2,pv3,color)
  74.  
  75.     else --General triangle
  76.         local alphaSplit = (pv2.y-pv1.y)/(pv3.y-pv1.y)
  77.         local vi ={
  78.             x = pv1.x + ((pv3.x - pv1.x) * alphaSplit),      
  79.             y = pv1.y + ((pv3.y - pv1.y) * alphaSplit), }
  80.         if pv2.x < vi.x then --Major right
  81.             drawFlatBottomTriangle(peripheralWrapper,pv1,pv2,vi,color)
  82.             drawFlatTopTriangle(peripheralWrapper,pv2,vi,pv3,color)
  83.         else --Major left
  84.             drawFlatBottomTriangle(peripheralWrapper,pv1,vi,pv2,color)
  85.             drawFlatTopTriangle(peripheralWrapper,vi,pv2,pv3,color)
  86.         end
  87.     end
  88. end
  89.  
  90. return {
  91.     drawSolidTriangle = drawSolidTriangle,
  92. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement