function frustum(left, right, bottom, top, near, far, dst) {
  dst = dst || new MatType(16);
  var dx = right - left;
  var dy = top - bottom;
  var dz = near - far;
  dst[0] = 2 * near / dx;
  dst[1] = 0;
  dst[2] = 0;
  dst[3] = 0;
  dst[4] = 0;
  dst[5] = 2 * near / dy;
  dst[6] = 0;
  dst[7] = 0;
  dst[8] = (left + right) / dx;
  dst[9] = (top + bottom) / dy;
  dst[10] = far / dz;
  dst[11] = -1;
  dst[12] = 0;
  dst[13] = 0;
  dst[14] = near * far / dz;
  dst[15] = 0;
  return dst;
}
Computes a 4-by-4 perspective transformation matrix given the left, right,
top, bottom, near and far clipping planes. The arguments define a frustum
extending in the negative z direction. The arguments near and far are the
distances to the near and far clipping planes. Note that near and far are not
z coordinates, but rather they are distances along the negative z-axis. The
matrix generated sends the viewing frustum to the unit box. We assume a unit
box extending from -1 to 1 in the x and y dimensions and from 0 to 1 in the z
dimension.
@param {number} left The x coordinate of the left plane of the box.
@param {number} right The x coordinate of the right plane of the box.
@param {number} bottom The y coordinate of the bottom plane of the box.
@param {number} top The y coordinate of the right plane of the box.
@param {number} near The negative z coordinate of the near plane of the box.
@param {number} far The negative z coordinate of the far plane of the box.
@param {module:twgl/m4.Mat4} [dst] Output matrix. If not passed a new one is created.
@return {module:twgl/m4.Mat4} The perspective projection matrix.
@memberOf module:twgl/m4