75 3D: Cameras and projection
3D reference map · First 3D picture
A camera’s local x axis is screen-right, local y is screen-up, and local negative z is forward. A default camera is at (vec3 0 0 8) and looks at origin3. The camera is reusable: viewport aspect is supplied when projecting or rendering, rather than stored in the camera.
struct
(struct perspective-projection3d (vertical-field-of-view) #:transparent) vertical-field-of-view : finite-real?
struct
(struct orthographic-projection3d (vertical-size) #:transparent) vertical-size : positive-real?
procedure
(perspective-camera3d [ #:position position #:look-at target #:up up #:rotation rotation #:near near #:far far #:vertical-field-of-view field-of-view]) → camera3d? position : vec3? = (vec3 0 0 8) target : vec3? = origin3 up : vec3? = y-axis3 rotation : (or/c #f rotation3?) = #f near : positive-real? = 1/10 far : positive-real? = 100 field-of-view : finite-real? = (/ pi 4)
procedure
(orthographic-camera3d [ #:position position #:look-at target #:up up #:rotation rotation #:near near #:far far #:vertical-size size]) → camera3d? position : vec3? = (vec3 0 0 8) target : vec3? = origin3 up : vec3? = y-axis3 rotation : (or/c #f rotation3?) = #f near : positive-real? = 1/10 far : positive-real? = 100 size : positive-real? = 6
procedure
(camera3d-position camera) → vec3?
camera : camera3d?
procedure
(camera3d-rotation camera) → rotation3?
camera : camera3d?
procedure
(camera3d-near camera) → positive-real?
camera : camera3d?
procedure
(camera3d-far camera) → positive-real?
camera : camera3d?
procedure
(camera3d-projection camera)
→ (or/c perspective-projection3d? orthographic-projection3d?) camera : camera3d?
procedure
(camera3d-forward camera) → vec3?
camera : camera3d?
procedure
(camera3d-right camera) → vec3?
camera : camera3d?
procedure
(camera3d-up camera) → vec3?
camera : camera3d?
procedure
(camera3d-look-at camera target [#:up up]) → camera3d?
camera : camera3d? target : vec3? up : vec3? = y-axis3
procedure
(camera3d-world->view camera point) → vec3?
camera : camera3d? point : vec3?
procedure
(camera3d-view-depth camera point) → finite-real?
camera : camera3d? point : vec3?
procedure
(camera3d-project camera point [ #:aspect aspect]) → (or/c #f vec2?) camera : camera3d? point : vec3? aspect : positive-real? = 1
procedure
(camera3d-pixel-ray camera pixel-x pixel-y #:width width #:height height) → ray3? camera : camera3d? pixel-x : finite-real? pixel-y : finite-real? width : exact-positive-integer? height : exact-positive-integer?
procedure
(camera3d-frustum camera [#:aspect aspect]) → vector?
camera : camera3d? aspect : positive-real? = 1