code: public Matrix4f determineProperties() {
          int properties = 0;
          if (m03 == 0.0f && m13 == 0.0f) {
              if (m23 == 0.0f && m33 == 1.0f) {
                  properties |= PROPERTY_AFFINE;
                  if (m00 == 1.0f && m01 == 0.0f && m02 == 0.0f && m10 == 0.0f && m11 == 1.0f && m12 == 0.0f
                          && m20 == 0.0f && m21 == 0.0f && m22 == 1.0f) {
                      properties |= PROPERTY_TRANSLATION | PROPERTY_ORTHONORMAL;
                      if (m30 == 0.0f && m31 == 0.0f && m32 == 0.0f)
                          properties |= PROPERTY_IDENTITY;
                  }
                  /* 
                   * We do not determine orthogonality, since it would require arbitrary epsilons
                   * and is rather expensive (6 dot products) in the worst case.
                   */
              } else if (m01 == 0.0f && m02 == 0.0f && m10 == 0.0f && m12 == 0.0f && m20 == 0.0f && m21 == 0.0f
                      && m30 == 0.0f && m31 == 0.0f && m33 == 0.0f) {
                  properties |= PROPERTY_PERSPECTIVE;
              }
          }
          this.properties = properties;
          return this;
      }
docs: Compute and set the matrix properties returned by {@link #properties()} based
  on the current matrix element values.
  
  @return this