mirror of
https://github.com/PhotonVision/photonvision
synced 2026-06-20 00:51:41 +00:00
24 lines
992 B
TypeScript
24 lines
992 B
TypeScript
import type { JsonMatOfDouble, Resolution } from "@/types/SettingTypes";
|
|
const { PerspectiveCamera } = await import("three");
|
|
|
|
/**
|
|
* Convert a camera intrinsics matrix and image resolution to a Three.js PerspectiveCamera. This assumes no skew and square pixels (same focal length in x and y), which is a sane assumption for most FRC cameras
|
|
*
|
|
* @param resolution video mode width/height
|
|
* @param intrinsicsCore camera intrinsics from the backend, row-major
|
|
* @returns a Three.js PerspectiveCamera matching the provided intrinsics
|
|
*/
|
|
export const createPerspectiveCamera = (
|
|
resolution: Resolution,
|
|
intrinsicsCore: JsonMatOfDouble,
|
|
frustumMax: number = 1
|
|
) => {
|
|
const imageWidth = resolution.width;
|
|
const imageHeight = resolution.height;
|
|
const focalLengthY = intrinsicsCore.data[4];
|
|
const fovY = 2 * Math.atan(imageHeight / (2 * focalLengthY)) * (180 / Math.PI);
|
|
const aspect = imageWidth / imageHeight;
|
|
|
|
return new PerspectiveCamera(fovY, aspect, 0.1, frustumMax);
|
|
};
|