Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. void Client::draw_DDA(int x1, int y1, int x2, int y2, unsigned int color1, unsigned int color2, double z1, double z2) {
  2.  
  3. float dx = x2-x1;
  4. float dy = y2-y1;
  5. float dz = z2-z1;
  6.  
  7. float loops = 0;
  8. float xChange, yChange, zChange = 0;
  9.  
  10. unsigned int interpColor;
  11.  
  12. int r1 = (color1 >> 16) & 0xFF;
  13. int g1 = (color1 >> 8) & 0xFF;
  14. int b1 = (color1) & 0xFF;
  15.  
  16. int r2 = (color2 >> 16) & 0xFF;
  17. int g2 = (color2 >> 8) & 0xFF;
  18. int b2 = (color2) & 0xFF;
  19.  
  20. int roundR, roundG, roundB;
  21.  
  22. float r = r1;
  23. float g = g1;
  24. float b = b1;
  25.  
  26. float dr = r2-r1;
  27. float dg = g2-g1;
  28. float db = b2-b1;
  29.  
  30.  
  31. if (abs(dx) > abs(dy)){
  32. loops = abs(dx);
  33. dr = dr/abs(dx);
  34. dg = dg/abs(dx);
  35. db = db/abs(dx);
  36. //dz = dz/abs(dx);
  37.  
  38. }else{
  39. loops = abs(dy);
  40. dr = dr/abs(dy);
  41. dg = dg/abs(dy);
  42. db = db/abs(dy);
  43. //dz = dz/abs(dy);
  44. }
  45.  
  46.  
  47. xChange = dx / loops;
  48. yChange = dy / loops;
  49. zChange = dz / loops;
  50.  
  51. float x = (float)x1;
  52. float y = (float)y1;
  53. float z = (float)z1;
  54.  
  55.  
  56. for(int i = 0; i<loops; i++){
  57. r += dr;
  58. g += dg;
  59. b += db;
  60. //z += dz;
  61.  
  62. roundR = round(r);
  63. roundG = round(g);
  64. roundB = round(b);
  65.  
  66. interpColor = (0xFF << 24) + ((roundR & 0xFF) << 16) + ((roundG & 0xFF) << 8) + (roundB & 0xFF);
  67.  
  68. if (z < zbuffer[int(floor(x + 0.5))][int(floor(y+ 0.5))]){
  69. drawable->setPixel(x, y, interpColor);
  70. zbuffer[int(floor(x+0.5))][int(floor(y+0.5))] = z;
  71. }
  72.  
  73. y += yChange;
  74. x += xChange;
  75. z += zChange;
  76.  
  77. }
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement