3D Computer Graphics, Rotations, and Lazy Professors
World Coordinates and the ViewingReference Coordinates  

The situation is we have two coordinate systems, shown below. (To fix ideas, we are thinking of the
coordinates as elements of R^{3}, not R^{4} as a projective space.
Then standard linear algebra applies.)
The world coordinate system is how our objects
are originally specified in 3 dimensions. The viewingreference coordinate system's claim to fame is that it
contains the uvplane, which
is the viewing plane (or projection plane). The viewing plane is of course 2 dimensional, and
ultimately part of it will be used to represent the 2D computer screen on which the user will see the original
3D world rendered. The viewing plane is defined by specifying a point on the
plane, the view reference
point (VRP), and a direction which will be taken as normal to the viewing plane, which in the diagram is
indicated by the direction along the naxis.
The vaxis specifys the up direction, and is orthogonal to n. Once the n and v
directions are known, then the uaxis is defined so that u,v, and n form a
righthanded coordinate system.
So, we will be working in the viewing reference coordinate system and thus we have to perform the
following operations:
The translation indicated in step 1 is routine, and the result is shown below:
Step 2 is what concerns us and is where Foley can be improved on. Our task is to figure out how
to rotate the the view coordinate system into the world coordinate system.
To define a linear transformation (and a rotation is a linear transformation)
it is sufficient to specify its action on any basis. So,
Let {{'{'}}i,j,k{{'}'}} be the standard ordered basis of R^{3}. Let {{'{'}}u,v,n{{'}'}} be unit vectors along the u,v, and n axes. They also are a basis of R^{3}. Then the rotation T: R^{3} → R^{3} is defined by
u → i,
The first thing to note is we are done. That's it. T is completely specified.
Given any vector α ∈ R^{3}, we can expand it as
α = a u + b v + c n ,
and the rotation acting on α is then
T(α) = T(a u + b v + c n)
The matrix A of a linear transformaion T:R^{n} → R^{n} relative to an ordered basis
β = {{'{'}}β_{1},β_{2},...,β_{n}{{'}'}} is defined by
T(β_{j}) = Σ A_{i}_{j} β_{i} (j=1,2,..,n)
Notice that the matrix of the transformation is defined by specifying the
action of the transformation on a basis, and as I have already indicated, we
have been given that in the problem statement. Incidentally
this is the standard method, and it is not the method Foley uses. Foley's
method will work to determine the matrix with respect to an
orthonormal basis, but it does not work for an arbitrary basis. If you
can guarantee your students are only going to work with rotations in R^{3},
and only with orthonormal bases, and not arbitrary linear transformations and bases, then perhaps
Foley might be OK, but that is quite an assumption. Better to learn how to do it in
the general case.
So, let's make the construction of the matrix A explicit:
T^{1}(i) = u_{x}i + u_{y}j + u_{z}k
and so the matrix of T^{1} (not T, but the inverse of T) relative to the standard
basis is given by:
Again, that is the matrix of T^{1}, not T. But we want the matrix of T.
To get that, we finally use the fact that rotations are othogonal transformations, which, by
definition means that TT^{t}= I, where T^{t} is the transpose of T.
Thus,
T^{t} = T^{1} and so,
T= (T^{1})^{t}
Finally, taking the transpose of the matrix above for T^{1}
, we get the desired matrix for T:
and that is the result Foley gets for the rotation matrix relative to the
standard basis of R^{3}.
