Advertisement
9551

3d testing

Sep 18th, 2021
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.84 KB | None | 0 0
  1. local per = peripheral.wrap("back")
  2. local c =  per.canvas()
  3. c.clear()
  4. local points = {
  5.     { {-10,},{-10},{-10}},
  6.     { {10},{-10},{-10}},
  7.     { {10},{10},{-10}},
  8.     { {-10},{10},{-10}},
  9.     { {-10},{-10},{10}},
  10.     { {10},{-10},{10}},
  11.     { {10},{10},{10}},
  12.     { {-10},{10},{10}}
  13. }
  14. local projection = {
  15.     {1,0,0},
  16.     {0,1,0},
  17.     {0,0,1}
  18. }
  19. local function matmul(m1, m2)
  20.     if #m1[1] ~= #m2 then
  21.         error("Columns m1 must match rows m2",2)
  22.         return nil
  23.     end
  24.     local result = {}
  25.     for i = 1, #m1 do
  26.         result[i] = {}
  27.         for j = 1, #m2[1] do
  28.             local sum = 0
  29.             for k = 1, #m2 do
  30.                 sum = sum + (m1[i][k] * m2[k][j])
  31.             end
  32.             result[i][j] = sum
  33.         end
  34.     end
  35.     return result
  36. end
  37. local angleX = 0
  38. local angleY = 0
  39. local angleZ = 0
  40. local pointIDs = {}
  41. local lineIDs = {}
  42. for k,v in pairs(points) do
  43.     pointIDs[k] = c.addDot({v[1][1]+80,v[2][1]+80},0xFF0000FF,3)
  44. end
  45. for i=1,12 do
  46.     lineIDs[i] = c.addLine({0,0},{0,0},0x0FFFFFFF,5)
  47. end
  48. local indexcon = 0
  49. local function connect(a,b)
  50.     indexcon = indexcon + 1
  51.     if not lineIDs[indexcon] then
  52.         lineIDs[indexcon] = c.addLine({a[1][1]+80,a[2][1]+80},{b[1][1]+80,b[2][1]+80},0x0FFFFFFF,1)
  53.     else
  54.         lineIDs[indexcon].setPoint(1,a[1][1]+80,a[2][1]+80)
  55.         lineIDs[indexcon].setPoint(2,b[1][1]+80,b[2][1]+80)
  56.     end
  57.     if indexcon >= 12 then indexcon = 0 end
  58. end
  59. local proj = {}
  60. while true do
  61.     local meta = per.getMetaOwner()
  62.     local angleY = math.rad(-meta.yaw)
  63.     local angleX = math.rad(meta.pitch)
  64.     local rotationZ = {
  65.         {math.cos(angleZ),-math.sin(angleZ),0},
  66.         {math.sin(angleZ),math.cos(angleZ),0},
  67.         {0,0,1}
  68.     }
  69.     local rotationX = {
  70.         {1,0,0},
  71.         {0,math.cos(angleX),-math.sin(angleX)},
  72.         {0,math.sin(angleX),math.cos(angleX)}
  73.     }
  74.     local rotationY = {
  75.         {math.cos(angleY),0,-math.sin(angleY)},
  76.         {0,1,0},
  77.         {math.sin(angleY),0,math.cos(angleY)}
  78.     }
  79.     local index = 1
  80.     for k,v in pairs(points) do
  81.         local pointData = {v[1],v[2],v[3]}
  82.         local rotatedX = matmul(rotationX,pointData)
  83.         local rotatedZ = matmul(rotationZ,rotatedX)
  84.         local rotatedY = matmul(rotationY,rotatedZ)
  85.         local projected = matmul(projection,rotatedY)
  86.         pointIDs[k].setPosition(projected[1][1]+80,projected[2][1]+80)
  87.         proj[index] = projected
  88.         index = index + 1
  89.     end
  90.     connect(proj[1],proj[2])
  91.     connect(proj[2],proj[3])
  92.     connect(proj[3],proj[4])
  93.     connect(proj[4],proj[1])
  94.    
  95.     connect(proj[5],proj[6])
  96.     connect(proj[6],proj[7])
  97.     connect(proj[7],proj[8])
  98.     connect(proj[8],proj[5])
  99.  
  100.     connect(proj[1],proj[5])
  101.     connect(proj[2],proj[6])
  102.     connect(proj[3],proj[7])
  103.     connect(proj[4],proj[8])
  104.  
  105.     sleep(0.05)
  106. end
  107.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement