If you have 3 vectors, right, up, and forward, you can write a ROW MAJOR change of basis matrix as follows:

[ right.x right.y right.z ]
[ up.x up.y up.z ]
[ -forward.x -forward.y -forward.z ]

The new basis in terms of the original basis are the ROWS of this change-of-basis matrix.

This matrix takes any vector with (1,0,0), (0,1,0), (0,0,1) as its OLD basis vectors, and rotates it so that its new basis vectors ARE right,up,forward as given.

A **viewing matrix** is the *transpose* of the change of basis matrix, because a viewing matrix “pushes the world away” from a stationary camera. (The viewing matrix isn’t going to _move the camera_, instead it moves the whole world so that the portion you want to see sits in the canonical viewing volume).

# To make this column major

Just transpose it.