Masterchoc

Untitled

Dec 13th, 2017
142
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. calculateTangents(vs, tc, ind) {
  2.         var i = 0;
  3.         var tangents = [];
  4.         for (i = 0; i < vs.length / 3; i++)
  5.             tangents[i] = [0, 0, 0];
  6.  
  7.         var a = [0, 0, 0], b = [0, 0, 0];
  8.         var triTangent = [0, 0, 0];
  9.  
  10.         for (i = 0; i < ind.length; i += 3) {
  11.             var i0 = ind[i];
  12.             var i1 = ind[i + 1];
  13.             var i2 = ind[i + 2];
  14.  
  15.             var pos0 = [vs[i0 * 3], vs[i0 * 3 + 1], vs[i0 * 3 + 2]];
  16.             var pos1 = [vs[i1 * 3], vs[i1 * 3 + 1], vs[i1 * 3 + 2]];
  17.             var pos2 = [vs[i2 * 3], vs[i2 * 3 + 1], vs[i2 * 3 + 2]];
  18.  
  19.             var tex0 = [tc[i0 * 2], tc[i0 * 2 + 1]];
  20.             var tex1 = [tc[i1 * 2], tc[i1 * 2 + 1]];
  21.             var tex2 = [tc[i2 * 2], tc[i2 * 2 + 1]];
  22.  
  23.             vec3.subtract(a, pos1, pos0);
  24.             vec3.subtract(b, pos2, pos0);
  25.  
  26.             var c2c1t = tex1[0] - tex0[0];
  27.             var c2c1b = tex1[1] - tex0[1];
  28.             var c3c1t = tex2[0] - tex0[0];
  29.             var c3c1b = tex2[0] - tex0[1];
  30.  
  31.             triTangent = [c3c1b * a[0] - c2c1b * b[0], c3c1b * a[1] - c2c1b * b[1], c3c1b * a[2] - c2c1b * b[2]];
  32.  
  33.             vec3.add(tangents[i0], tangents[i0], triTangent);
  34.             vec3.add(tangents[i1], tangents[i1], triTangent);
  35.             vec3.add(tangents[i2], tangents[i2], triTangent);
  36.         }
  37.  
  38.         // Normalize tangents
  39.         var ts = [];
  40.         for (i = 0; i < tangents.length; i++) {
  41.             var tan = tangents[i];
  42.             vec3.normalize(tan, tan);
  43.             ts.push(tan[0]);
  44.             ts.push(tan[1]);
  45.             ts.push(tan[2]);
  46.         }
  47.  
  48.         return ts;
  49.     }
RAW Paste Data