setViewOffset method
- dynamic fullWidth,
- dynamic fullHeight,
- dynamic x,
- dynamic y,
- dynamic width,
- 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();
}