# Building view transform matrices

For a 3D scene in the world coordinates, its View Reference Point $\mathrm{VRP}$ is at $(5,-2,1)$, and a viewer is looking towards point $A=(1,1,1)$. Construct a transform matrix which will map world coordinate points to a right-handed $(UVN)$ viewing space, so that $\mathrm{VRP}$ is the origin, the line joining $\mathrm{VRP}$ to $A$ is the positive $N$ axis, and the view-up Vector is $(0,0,1)$.

To my knowledge, the final answer should be a single transform matrix. To calculate the final matrix, I first find the matrix which translates the coordinate system to the to the origin in homogeneous matrix form:

Translation matrix:

$$T= \begin{bmatrix} 1 &0 &0 &-5 \\ 0 &1 &0& 2 \\ 0 &0 &1 &-1 \\ 0 &0 &0 &1 \\ \end{bmatrix}$$

Using the unit vectors of the coordinate axes, the resulting rotation matrix is:

$$R= \begin{bmatrix} -0.6 &-0.8 &0 &0 \\ 0 &0 &0 &1 \\ -0.8 &0.6 &0 &0 \\ 0 &0 &0 &1 \\ \end{bmatrix}$$ Then the final matrix (the final answer for full marks) would be the rotation matrix multiplied by the translation matrix:

$$M= \begin{bmatrix} -0.6 &-0.8 &0 &1.4 \\ 0 &0 &0 &1 \\ -0.8 &0.6 &0 &5.2 \\ 0 &0 &0 &1 \\ \end{bmatrix}$$ Is my method and final answer correct?

Following the answer to this question, I have calculated the translation matrix:

$$T= \begin{pmatrix} 1 & 0 & 0 & -5 \\ 0 & 1 & 0 & 2 \\ 0 & 0 & 1 & -1 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}$$

I have calculated the rotation matrix:

$$R= \begin{pmatrix} -0.6 & -0.8 & 0 & 0 \\ 0 & 0 & 1 & 0 \\ -0.8 & 0.6 & 0 & 0 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}$$

But what would the final transformation matrix $M$ be? My lecture slides tell me it would be rotation matrix multiplied by translation matrix, with the last column multiplied by $-1$ except for the $1$. This would equal:

$$M = R \times T = \begin{pmatrix} -0.6 & -0.8 & 0 & -1.4 \\ 0 & 0 & 1 & 1 \\ -0.8 & 0.6 & 0 & -5.2 \\ 0 & 0 & 0 & 1 \\ \end{pmatrix}$$

But the answer here just adds them together somehow. Which one is correct?

• Have you made any headway on this by yourself, or any ideas? – PeteUK Feb 19 '17 at 18:32
• Its pretty common to feel this way in higher education, i know i did. In reality its a issue with yourself. Sure the educators aren't stellar but that is simply because your coming nearer the boundary of know how and your ability to work in several different levels of abstractions and several levels of uncertainty comes to play. (something that is very poison to certain mind frames. You'll get over this in about 5 years). The question itself is quite good. If you ever do any robotics, 3D graphics or engineering you'll be glad. It measures wether you undertood the 3 first thing you were taught. – joojaa Feb 19 '17 at 18:56
• Hello PeteUK. Yes, I have edited the question and added my progress so far. – S.A Feb 26 '17 at 22:37
• I'm doubting that the third column should be all zeros. It's late here and will try to look at it more tomorrow, but think that column should be the basis vector for your $N$. – PeteUK Mar 2 '17 at 0:05
• I'm also doubting that $1$ in row 2, column 4 of your rotation matrix. That's the translation part of the matrix. – PeteUK Mar 2 '17 at 0:09

To solve the problem, we will flow three steps, first, calculate translation matrix, second, calculate rotation matrix, third, get transformation matrix.

Because translation is a affine transformation, we need to use a 4x4 matrix to represent translation. I find you use column vector post-multiply matrix. the result of the translation matrix is same as yours.

Translation matrix =

Then, same as your idea, we use basis vectors(same as unit vectors of the coordinate axes) to calculate rotation matrix.

1. basis z vector: we can get rotated basis z vector by using a vector from VRP to point A, and normalize it.

z = b(VRP) - a = [5,-2,1] - [1,1,1] = [4,-3,0] ,then, normalize to [0.8,-0.6,0]

2. basis x vector: we know basis vector is a vector perpendicular to z-up plane, we get the x vector by cross product up and z

x = up x z = [1,1,1] x [0.8 ,-0.6 ,0] = [0.6, 0.8, 0]

3. basis y vector, y is prependicular to z-x plane.

y = z x x = [0.8 ,-0.6, 0] x [0.6, 0.8, 0] = [0, 0, 1]

finally, the rotation matrix is:

Rotation Matrix =

The 4x4 matrix is:

Transformation matrix =

The transformation matrix is a matrix from Object Space to World Space, we should invert this matrix to get World Space to Camera Space matrix.(Thanks for @JarkkoL correcting me).

Following your request for clarification: I just combine the translation matrix and the rotation matrix, actually, It's the result translation matrix(T) multiply rotation matrix(R).

The rotation is a 3x3 matrix, we can extend the matrix to a 4x4 matrix with adding a dimension, the 4x4 rotation matrix is:

And the translation matrix is:

So, now we can calculate the transform matrix by translation matrix multiply(T) rotation matrix(R):

Cause the matrix multiply formula is too big for the 4x4 matrix, we just look at the 1st row, In the transform matrix(M), the M11 element equals to T11*R11+T12*R21+T13*R31+T14*R41, cause T12, T13, R41 is 0, so, the M11 equals to R11 right? And in the same way, M14 equals to T11*R14+T12*R24+T13*R34+T14*R44, only R44 equals to 1, so, the M14 equals to T14. so, I just simply put them together in my last answer. For the reason why we put the translation matrix on the left, you can check on the book that I gave you in my previous answer on page 91(translating first and then rotating).

• You also need to invert the matrix in the end – JarkkoL Mar 2 '17 at 2:59
• @JarkkoL, I don't know why it needs to invert, can you explain? – Craig.Li Mar 2 '17 at 4:06
• OP is asking for view (world->camera) matrix, while you are building object->world matrix – JarkkoL Mar 2 '17 at 4:13
• @JarkkoL Thank you very much, I misunderstood the transformation. already change the answer. – Craig.Li Mar 2 '17 at 6:08
• This is great. I will check with my lecturer and once he approves, I'll accept the answer. – S.A Mar 2 '17 at 10:33