code: function (matrix) {
          var min = this.min.array;
          var max = this.max.array;
  
          var m = matrix.array;
          // min in min z
          var v10 = min[0];
          var v11 = min[1];
          var v12 = min[2];
          // max in min z
          var v20 = max[0];
          var v21 = max[1];
          var v22 = min[2];
          // max in max z
          var v30 = max[0];
          var v31 = max[1];
          var v32 = max[2];
  
          if (m[15] === 1) {  // Orthographic projection
              min[0] = m[0] * v10 + m[12];
              min[1] = m[5] * v11 + m[13];
              max[2] = m[10] * v12 + m[14];
  
              max[0] = m[0] * v30 + m[12];
              max[1] = m[5] * v31 + m[13];
              min[2] = m[10] * v32 + m[14];
          }
          else {
              var w = -1 / v12;
              min[0] = m[0] * v10 * w;
              min[1] = m[5] * v11 * w;
              max[2] = (m[10] * v12 + m[14]) * w;
  
              w = -1 / v22;
              max[0] = m[0] * v20 * w;
              max[1] = m[5] * v21 * w;
  
              w = -1 / v32;
              min[2] = (m[10] * v32 + m[14]) * w;
          }
          this.min._dirty = true;
          this.max._dirty = true;
  
          return this;
      }
docs: Apply a projection matrix to the bounding box
  @param  {clay.Matrix4} matrix