code: function makePlane(u, v, w, su, sv, nu, nv, pw, flipu, flipv) {
      var vertShift = vertexIndex;
      for (var j=0; j<=nv; j++) {
        for (var i=0; i<=nu; i++) {
          vert = vertices[vertexIndex] = Vec3.create();
          vert[u] = (-su / 2 + i * su / nu) * flipu;
          vert[v] = (-sv / 2 + j * sv / nv) * flipv;
          vert[w] = pw;
          normal = normals[vertexIndex] = Vec3.create();
          normal[u] = 0;
          normal[v] = 0;
          normal[w] = pw / Math.abs(pw);
          texCoord = texCoords[vertexIndex] = Vec2.create();
          texCoord.x = i / nu;
          texCoord.y = 1.0 - j / nv;
          ++vertexIndex;
        }
      }
      for (var j=0; j<=nv-1; j++) {
        for (var i=0; i<=nu-1; i++) {
          var n = vertShift + j * (nu + 1) + i;
          faces.push([n, n + nu + 1, n + nu + 2, n + 1]);
        }
      }
    }
docs: How faces are constructed:  0-----1 . . 2       n  <----  n+1 |   / .     .       |         A | /   .     .       V         | 3 . . 4 . . 5      n+nu --> n+nu+1 .     .     . .     .     . 6 . . 7 . . 8