SHARE
TWEET

Untitled

gamax92 Dec 29th, 2013 98 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. local gpuobj
  2. local function putpixel(obj)
  3.         gpuobj.setColor(obj.r,obj.g,obj.b)
  4.         gpuobj.plot(obj.x,obj.y)
  5. end
  6.  
  7. local function copy(orig)
  8.     local orig_type = type(orig)
  9.     local copy
  10.     if orig_type == 'table' then
  11.         copy = {}
  12.         for orig_key, orig_value in pairs(orig) do
  13.             copy[orig_key] = orig_value
  14.         end
  15.     else -- number, string, boolean, etc
  16.         copy = orig
  17.     end
  18.     return copy
  19. end
  20.  
  21. function gouraud(gpu,x1,y1,x2,y2,x3,y3,r1,g1,b1,r2,g2,b2,r3,g3,b3)
  22.         gpuobj = gpu
  23.         A = {x = x1,y = y1,r = r1,g = g1,b = b1}
  24.         B = {x = x2,y = y2,r = r2,g = g2,b = b2}
  25.         C = {x = x3,y = y3,r = r3,g = g3,b = b3}
  26.         if B.y > C.y then
  27.                 B,C = C,B
  28.         end
  29.         if A.y > B.y then
  30.                 A,B = B,A
  31.         end
  32.         if A.y > C.y then
  33.                 A,C = C,A
  34.         end
  35.         if (B.y-A.y > 0) then
  36.                 dx1=(B.x-A.x)/(B.y-A.y);
  37.                 dr1=(B.r-A.r)/(B.y-A.y);
  38.                 dg1=(B.g-A.g)/(B.y-A.y);
  39.                 db1=(B.b-A.b)/(B.y-A.y);
  40.         else
  41.                 dx1,dr1,dg1,db1=0,0,0,0;
  42.         end
  43.        
  44.         if (C.y-A.y > 0) then
  45.                 dx2=(C.x-A.x)/(C.y-A.y);
  46.                 dr2=(C.r-A.r)/(C.y-A.y);
  47.                 dg2=(C.g-A.g)/(C.y-A.y);
  48.                 db2=(C.b-A.b)/(C.y-A.y);
  49.         else
  50.                 dx2,dr2,dg2,db2=0,0,0,0;
  51.         end
  52.        
  53.         if (C.y-B.y > 0) then
  54.                 dx3=(C.x-B.x)/(C.y-B.y);
  55.                 dr3=(C.r-B.r)/(C.y-B.y);
  56.                 dg3=(C.g-B.g)/(C.y-B.y);
  57.                 db3=(C.b-B.b)/(C.y-B.y);
  58.         else
  59.                 dx3,dr3,dg3,db3=0,0,0,0;
  60.         end
  61.        
  62.         E=copy(A);
  63.         S=copy(E);
  64.         if (dx1 > dx2) then
  65.                 while (S.y<=B.y) do
  66.                         if (E.x-S.x > 0) then
  67.                                 dr=(E.r-S.r)/(E.x-S.x);
  68.                                 dg=(E.g-S.g)/(E.x-S.x);
  69.                                 db=(E.b-S.b)/(E.x-S.x);
  70.                         else
  71.                                 dr,dg,db=0,0,0;
  72.                         end
  73.                         P=copy(S);
  74.                         while (P.x < E.x) do
  75.                                 putpixel(P);
  76.                                 P.r=P.r+dr; P.g=P.g+dg; P.b=P.b+db;
  77.                                 P.x = P.x + 1
  78.                         end
  79.                         S.x=S.x+dx2; S.r=S.r+dr2; S.g=S.g+dg2; S.b=S.b+db2;
  80.                         E.x=E.x+dx1; E.r=E.r+dr1; E.g=E.g+dg1; E.b=E.b+db1;
  81.                         S.y = S.y + 1
  82.                         E.y = E.y + 1
  83.                 end
  84.  
  85.                 E=copy(B);
  86.                 while (S.y<=C.y) do
  87.                         if (E.x-S.x > 0) then
  88.                                 dr=(E.r-S.r)/(E.x-S.x);
  89.                                 dg=(E.g-S.g)/(E.x-S.x);
  90.                                 db=(E.b-S.b)/(E.x-S.x);
  91.                         else
  92.                                 dr,dg,db=0,0,0;
  93.                         end
  94.                         P=copy(S);
  95.                         while (P.x < E.x) do
  96.                                 putpixel(P);
  97.                                 P.r=P.r+dr; P.g=P.g+dg; P.b=P.b+db;
  98.                                 P.x = P.x + 1
  99.                         end
  100.                         S.x=S.x+dx2; S.r=S.r+dr2; S.g=S.g+dg2; S.b=S.b+db2;
  101.                         E.x=E.x+dx3; E.r=E.r+dr3; E.g=E.g+dg3; E.b=E.b+db3;
  102.                         S.y = S.y + 1
  103.                         E.y = E.y + 1
  104.                 end
  105.         else
  106.                 while (S.y<=B.y) do
  107.                         if (E.x-S.x > 0) then
  108.                                 dr=(E.r-S.r)/(E.x-S.x);
  109.                                 dg=(E.g-S.g)/(E.x-S.x);
  110.                                 db=(E.b-S.b)/(E.x-S.x);
  111.                         else
  112.                                 dr,dg,db=0,0,0;
  113.                         end
  114.  
  115.                         P=copy(S);
  116.                         while (P.x < E.x) do
  117.                                 putpixel(P);
  118.                                 P.r=P.r+dr; P.g=P.g+dg; P.b=P.b+db;
  119.                                 P.x = P.x + 1
  120.                         end
  121.                         S.x=S.x+dx1; S.r=S.r+dr1; S.g=S.g+dg1; S.b=S.b+db1;
  122.                         E.x=E.x+dx2; E.r=E.r+dr2; E.g=E.g+dg2; E.b=E.b+db2;
  123.                         S.y = S.y + 1
  124.                         E.y = E.y + 1
  125.                 end
  126.  
  127.                 S=copy(B);
  128.                 while (S.y<=C.y) do
  129.                         if (E.x-S.x > 0) then
  130.                                 dr=(E.r-S.r)/(E.x-S.x);
  131.                                 dg=(E.g-S.g)/(E.x-S.x);
  132.                                 db=(E.b-S.b)/(E.x-S.x);
  133.                         else
  134.                                 dr,dg,db=0,0,0;
  135.                         end
  136.  
  137.                         P=copy(S);
  138.                         while (P.x < E.x) do
  139.                                 putpixel(P);
  140.                                 P.r=P.r+dr; P.g=P.g+dg; P.b=P.b+db;
  141.                                 P.x = P.x + 1
  142.                         end
  143.                         S.x=S.x+dx3; S.r=S.r+dr3; S.g=S.g+dg3; S.b=S.b+db3;
  144.                         E.x=E.x+dx2; E.r=E.r+dr2; E.g=E.g+dg2; E.b=E.b+db2;
  145.                         S.y = S.y + 1
  146.                         E.y = E.y + 1
  147.                 end
  148.         end
  149. end
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
Not a member of Pastebin yet?
Sign Up, it unlocks many cool features!
 
Top