function createProjCamera(fSpyParameters, { near = 0.01, far = 200 }) {
const fov = (fSpyParameters.verticalFieldOfView * 180) / Math.PI;
const aspect = fSpyParameters.imageWidth / fSpyParameters.imageHeight;
const camera = new THREE.PerspectiveCamera(fov, aspect, near, far);
const matrix4 = new THREE.Matrix4();
matrix4.set(...fSpyParameters.cameraTransform.rows.flat());
camera.applyMatrix4(matrix4);
camera.setViewOffset(
fSpyParameters.imageWidth,
fSpyParameters.imageHeight,
-(fSpyParameters.principalPoint.x * fSpyParameters.imageWidth) / 2,
(fSpyParameters.principalPoint.y * fSpyParameters.imageHeight) / 2,
fSpyParameters.imageWidth,
fSpyParameters.imageHeight
);
camera.updateMatrixWorld();
return camera;
}