private static boolean foundInfo(
      final Vert3D orig,
      final Vert3D axis,
      final Vert3D corn
  ) {
    //
    //  First, we establish (and normalise) the 'V' axis.
    line.set(axis.x - orig.x, axis.y - orig.y) ;
    if ((lineL = line.length()) <= 0) return false ;
    line.x /= lineL ;
    line.y /= lineL ;
    //
    //  The 'U' axis is automatically perpendicular.  What are the UV
    //  coordinates of the  corner vertex on that basis?  We'll be comparing
    //  the mouse coordinates to this.
    out.set(corn.x - orig.x, corn.y - orig.y) ;
    outU = line.lineDist(out) ;
    outV = line.dot(out) ;
    if (outU <= 0) return false ;
    //  So, acquire those mouse coordinates:
    midP.set(mx - orig.x, my - orig.y) ;
    midU = line.lineDist(midP) ;
    midV = line.dot(midP) ;
    //
    //  Now, we'll need to scale and adjust those relative to the coordinates
    //  of the corner vertex.
    //  The closer the mouse point is to the corner vertex, the more the 'V
    //  axis' will 'shrink' (as it becomes length 0 at the corner itself.)
    //  '(1 - midU) * lineL' is the length of the 'V axis' at this point, while
    //  '(outV * midU)' represents the base V offset of the 'axis' itself at
    //  that distance.
    midU /= outU ;
    if (midU > 1 || midU < 0) return false ;
    midV = (midV - (outV * midU)) / ((1 - midU) * lineL) ;
    //  ...Then we just interpolate the depth and true UV values.
    foundD = (midV * axis.z) + ((1 - midV) * orig.z) ;
    foundD = (midU * corn.z) + ((1 - midU) * foundD) ;
    foundU = (midV * axis.u) + ((1 - midV) * orig.u) ;
    foundU = (midU * corn.u) + ((1 - midU) * foundU) ;
    foundV = (midV * axis.v) + ((1 - midV) * orig.v) ;
    foundV = (midU * corn.v) + ((1 - midU) * foundV) ;
    return true ;
  }