static computeTexCoords(positions, boundingRectangle) {
    //>>includeStart('debug', pragmas.debug);
    Check.defined("positions", positions);
    Check.defined("boundingRectangle", boundingRectangle);
    //>>includeEnd('debug');

    const texCoord = new Cartesian2();
    const invSizeX = 1.0 / boundingRectangle.width;
    const invSizeY = 1.0 / boundingRectangle.height;
    const texCoords = ModelImageryMapping.map(positions, (p) => {
      const uRaw = (p.x - boundingRectangle.x) * invSizeX;
      const vRaw = (p.y - boundingRectangle.y) * invSizeY;
      const u = Math.min(Math.max(uRaw, 0.0), 1.0);
      const v = Math.min(Math.max(vRaw, 0.0), 1.0);
      texCoord.x = u;
      texCoord.y = v;
      return texCoord;
    });
    return texCoords;
  }
Computes the texture coordinates for the given positions, relative
to the given bounding rectangle.

This will make the x/y coordinates of the given cartesians relative
to the given bounding rectangle and clamp them to [0,0]-[1,1].

NOTE: This could be broken down into
1. mapping to 2D
2. relativizing for the bounding recangle
3. clamping to [0,0]-[1,1]

@param {Iterable<Cartesian3>} positions The positions
@param {BoundingRectangle} boundingRectangle The rectangle
@returns {Iterable<Cartesian2>} The texture coordinates