2323  Askalite [Off]
(21.03.2019 / 02:27)
  1. function vertex(){
  2.     this.x = 0.0 ;
  3.     this.y = 0.0 ;
  4.     this.u = 0.0 ;
  5.     this.v = 0.0 ;
  6. }
  7.  
  8. var a = new vertex();
  9. var b = new vertex();
  10. var c = new vertex();
  11.  
  12. var d = new vertex();
  13.  
  14. var x = 0 ;
  15. var y = 0 ;
  16.  
  17. var u = 0.0;
  18. var v = 0.0;
  19. var du = 0.0;
  20. var dv = 0.0;
  21.  
  22. var u1 = 0.0;
  23. var v1 = 0.0;
  24. var u2 = 0.0;
  25. var v2 = 0.0;
  26. vat u3 = 0.0;
  27. var v3 = 0.0;
  28.  
  29. var x1 = 0.0;
  30. var x2 = 0.0;
  31. var x3 = 0.0;
  32.  
  33. function drawTriangle(){
  34.     if (a.y > b.y) {d = a; a = b; b = d;}
  35.     if (a.y > c.y) {d = a; a = c; c = d;}
  36.     if (b.y > c.y) {d = b; b = c; c = d;}
  37.  
  38.     if ((Math.trunc(a.y) == Math.trunc(c.y)) return;
  39.  
  40.     x1 = a.x + (c.x - a.x) * (b.y - a.y) / (c.y - a.y);
  41.     u1 = a.u + (c.u - a.u) * (b.y - a.y) / (c.y - a.y);
  42.     v1 = a.v + (c.v - a.v) * (b.y - a.y) / (c.y - a.y);
  43.     x2 = b.x;
  44.     u2 = b.u;
  45.     v2 = b.v;
  46.     du = (u1 - u2) / (x1 - x2);
  47.     dv = (v1 - v2) / (x1 - x2);
  48.  
  49.     for (y = Math.trunc(a.y); y <= Math.yrunc(c.y); y++) {
  50.         x1 = a.x + (c.x - a.x) * (y - a.y) / (c.y - a.y);
  51.         u1 = a.u + (c.u - a.u) * (y - a.y) / (c.y - a.y);
  52.         v1 = a.v + (c.v - a.v) * (y - a.y) / (c.y - a.y);
  53.  
  54.         if (y >= b.y) {
  55.             x2 = b.x + (c.x - b.x) * (y - b.y) / (c.y - b.y);
  56.             u2 = b.u + (c.u - b.u) * (y - b.y) / (c.y - b.y);
  57.             v2 = b.v + (c.v - b.v) * (y - b.y) / (c.y - b.y);
  58.         } else {
  59.             x2 = a.x + (b.x - a.x) * (y - a.y) / (b.y - a.y);
  60.             u2 = a.u + (b.u - a.u) * (y - a.y) / (b.y - a.y);
  61.             v2 = a.v + (b.v - a.v) * (y - a.y) / (b.y - a.y);
  62.         }
  63.         if (x1 > x2) {
  64.             x3 = x1; x1 = x2; x2 = x3;
  65.             u3 = u1; u1 = u2; u2 = u3;
  66.             v3 = v1; v1 = v2; v2 = v3;
  67.         }
  68.         u = u1;
  69.         v = v1;
  70.         for (x = Math.trunc(x1); x <= Math.trunc(x2); x++) {
  71.             // TODO: рисуем пиксель, с координатами x,y, цвет которого соответствует цвету пикселя в текстуре с координатами u,v
  72.             dst[Math.trunc(y*width+x)]=src[Math.trunc(u*width+v)];
  73.             u += du; v += dv;
  74.         }
  75.     }
  76. }
Всего: 1
К записи
Работа с графикой
Категории

Мы в соцсетях

tw tg yt gt