1
$\begingroup$

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?

$\endgroup$
5
  • 2
    $\begingroup$ Have you made any headway on this by yourself, or any ideas? $\endgroup$
    – PeteUK
    Commented Feb 19, 2017 at 18:32
  • 3
    $\begingroup$ 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. $\endgroup$
    – joojaa
    Commented Feb 19, 2017 at 18:56
  • $\begingroup$ Hello PeteUK. Yes, I have edited the question and added my progress so far. $\endgroup$
    – S.A
    Commented Feb 26, 2017 at 22:37
  • $\begingroup$ 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$. $\endgroup$
    – PeteUK
    Commented Mar 2, 2017 at 0:05
  • $\begingroup$ I'm also doubting that $1$ in row 2, column 4 of your rotation matrix. That's the translation part of the matrix. $\endgroup$
    – PeteUK
    Commented Mar 2, 2017 at 0:09

1 Answer 1

1
+50
$\begingroup$

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 = 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 = rotation matrix

    The 4x4 matrix is:

    Transformation matrix = enter image description here

    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).

    Refer to 3D Math Primer for Graphics and Game Developmen.


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:

enter image description here

And the translation matrix is:

enter image description here

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).

$\endgroup$
8
  • $\begingroup$ You also need to invert the matrix in the end $\endgroup$
    – JarkkoL
    Commented Mar 2, 2017 at 2:59
  • $\begingroup$ @JarkkoL, I don't know why it needs to invert, can you explain? $\endgroup$
    – Craig.Li
    Commented Mar 2, 2017 at 4:06
  • $\begingroup$ OP is asking for view (world->camera) matrix, while you are building object->world matrix $\endgroup$
    – JarkkoL
    Commented Mar 2, 2017 at 4:13
  • $\begingroup$ Hi, I just made a new question: computergraphics.stackexchange.com/questions/4917/… The problem I am having with your final transformation matrix is that it is not following the steps my lecture slides are telling me. My lecture slides tell me to multiply the rotation matrix with the translation matrix to find the final transformation matrix. $\endgroup$
    – S.A
    Commented Mar 28, 2017 at 11:18
  • $\begingroup$ Why do you use the vector A(1, 1, 1) instead of the VUP vector(0,0,1) to work out the first row of the rotation matrix? $\endgroup$
    – link
    Commented May 27, 2017 at 18:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.