The eye: a position and a rotation (looking down its -Z with +Y up), a vertical field of
view in radians, and near and far distances. snap: true places it without
interpolating from where it was on the previous tick.
viewport is the part of the frame the view is drawn into, {x, y, width, height} as
fractions of the frame from its top left; the rest of the frame is black under the
overlay. aspect is how wide the viewport shows on screen against its height, for
frames whose pixels are not square; nil takes it from the viewport's pixels.
resolution, {columns, rows}, shows the view as that many blocks across and down its
viewport, each the colour at its centre; nil shows every pixel.
Summary
Types
@type t() :: %CauldronGPU.Camera{ aspect: number() | nil, far: number(), fov_y: number(), near: number(), position: {number(), number(), number()}, resolution: {pos_integer(), pos_integer()} | nil, rotation: CauldronGPU.Quat.t(), snap: boolean(), viewport: {number(), number(), number(), number()} }