Advertisement
gamax92

Untitled

Dec 29th, 2013
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.17 KB | None | 0 0
  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
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement