code: public Matrix4f reflection(float a, float b, float c, float d) {
          float da = a + a, db = b + b, dc = c + c, dd = d + d;
          this._m00(1.0f - da * a);
          this._m01(-da * b);
          this._m02(-da * c);
          this._m03(0.0f);
          this._m10(-db * a);
          this._m11(1.0f - db * b);
          this._m12(-db * c);
          this._m13(0.0f);
          this._m20(-dc * a);
          this._m21(-dc * b);
          this._m22(1.0f - dc * c);
          this._m23(0.0f);
          this._m30(-dd * a);
          this._m31(-dd * b);
          this._m32(-dd * c);
          this._m33(1.0f);
          _properties(PROPERTY_AFFINE | PROPERTY_ORTHONORMAL);
          return this;
      }
docs: Set this matrix to a mirror/reflection transformation that reflects about the given plane
  specified via the equation <code>x*a + y*b + z*c + d = 0</code>.
  <p>
  The vector <code>(a, b, c)</code> must be a unit vector.
  <p>
  Reference: <a href="https://msdn.microsoft.com/en-us/library/windows/desktop/bb281733(v=vs.85).aspx">msdn.microsoft.com</a>
  
  @param a
  the x factor in the plane equation
  @param b
  the y factor in the plane equation
  @param c
  the z factor in the plane equation
  @param d
  the constant in the plane equation
  @return this