docs: protected void lookAt() {mTempPosition.set(getPositionX(), getPositionY(), getPositionZ());
          mTempPosition.negate(mDirection);
  
          Vector3f up;
          mDirection.normalize();
  
          if (Math.abs(mDirection.x) < 0.00001
                  && Math.abs(mDirection.z) < 0.00001) {
              if (mDirection.y > 0) {
                  up = new Vector3f(0.0f, 0.0f, -1.0f); // if direction points in +y
              } else {
                  up = new Vector3f(0.0f, 0.0f, 1.0f); // if direction points in -y
              }
          } else {
              up = new Vector3f(0.0f, 1.0f, 0.0f); // y-axis is the general up
          }
  
          up.normalize();
          Vector3f right = new Vector3f();
          up.cross(mDirection, right);
          right.normalize();
          mDirection.cross(right, up);
          up.normalize();
  
          float[] matrix = new float[]{right.x, right.y, right.z, 0.0f, up.x, up.y,
                  up.z, 0.0f, mDirection.x, mDirection.y, mDirection.z, 0.0f,
                  0.0f, 0.0f, 0.0f, 0.0f};
          getOwnerObject().getTransform().setModelMatrix(matrix);
      }