# `CauldronGPU.Camera`
[🔗](https://github.com/jaman/cauldron/blob/v0.3.3/cauldron_gpu/lib/cauldron_gpu/camera.ex#L1)

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.

# `t`

```elixir
@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()}
}
```

---

*Consult [api-reference.md](api-reference.md) for complete listing*
