On this page:
9.1 The axes
9.2 Scale, rotate, then move
9.3 Geometry and drawing are separate
9.3

9 Three-dimensional coordinates🔗ℹ

A 3D object has local coordinates, just as a 2D object does. A spatial transform places it in the 3D world. A 3D camera projects that world into a 2D viewport.

A view3d is an ordinary 2D Visual containing that viewport. It can appear beside text or inside a larger Scene. You do not need a second video timeline.

9.1 The axes🔗ℹ

The coordinate system is right-handed. The named unit vectors are x-axis3, y-axis3, and z-axis3. Their orientation is specified by (vec3-cross x-axis3 y-axis3), which is z-axis3. The origin is origin3. A point from the 2D xy plane becomes (vec3 x y 0).

What appears left, right, near, or far in the picture also depends on the camera. The world axes do not change when the camera moves.

9.2 Scale, rotate, then move🔗ℹ

An author-facing transform applies its scale first, then its rotation, then its translation:

(define placement
  (make-transform3
   #:translation (vec3 4 0 0)
   #:rotation (axis-angle z-axis3 (/ pi 2))
   #:scale (vec3 2 2 2)))
(transform3-apply-point placement (vec3 1 0 0))

Here the point is doubled, rotated a quarter-turn, and moved four units in x. Composing nonuniform scales and rotations can also produce shear. That is why transform3-compose returns an affine3 map instead of discarding that part of the result.

9.3 Geometry and drawing are separate🔗ℹ

Meshes, spatial trees, cameras, and transforms are data. The renderer draws them at a requested time. The software renderer is the default. The optional OpenGL backend has its own environment requirements and rendering limits.

Do not use a chapter about coordinates as a capability checklist. The 3D API entries in Reference describe supported geometry, lighting, transparency, picking, prepared trajectories, and backend restrictions. Changes to those features do not change the coordinate conventions above.