setViewOffset method

void setViewOffset(
  1. dynamic fullWidth,
  2. dynamic fullHeight,
  3. dynamic x,
  4. dynamic y,
  5. dynamic width,
  6. dynamic height,
)
  • Sets an offset in a larger frustum. This is useful for multi-window or
    • multi-monitor/multi-machine setups. *
      • For example, if you have 3x2 monitors and each monitor is 1920x1080 and
      • the monitors are in grid like this
      • +---+---+---+
      • | A | B | C |
      • +---+---+---+
      • | D | E | F |
      • +---+---+---+
      • then for each monitor you would call it like this
      • const w = 1920;
      • const h = 1080;
      • const fullWidth = w * 3;
      • const fullHeight = h * 2;
      • --A--
      • camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 0, w, h );
      • --B--
      • camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 0, w, h );
      • --C--
      • camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 0, w, h );
      • --D--
      • camera.setViewOffset( fullWidth, fullHeight, w * 0, h * 1, w, h );
      • --E--
      • camera.setViewOffset( fullWidth, fullHeight, w * 1, h * 1, w, h );
      • --F--
      • camera.setViewOffset( fullWidth, fullHeight, w * 2, h * 1, w, h );
      • Note there is no reason monitors have to be the same size or in a grid.

Implementation

void setViewOffset(fullWidth, fullHeight, x, y, width, height) {
  aspect = fullWidth / fullHeight;

  view ??= {
    "enabled": true,
    "fullWidth": 1,
    "fullHeight": 1,
    "offsetX": 0,
    "offsetY": 0,
    "width": 1,
    "height": 1
  };

  view!["enabled"] = true;
  view!["fullWidth"] = fullWidth;
  view!["fullHeight"] = fullHeight;
  view!["offsetX"] = x;
  view!["offsetY"] = y;
  view!["width"] = width;
  view!["height"] = height;

  updateProjectionMatrix();
}