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();
}