Difference between revisions of "Discussion8S16"

From Immersive Visualization Lab Wiki
Jump to: navigation, search
(Added slide.)
 
(Mystery of the Orientation: Completed.)
Line 5: Line 5:
  
 
==Mystery of the Orientation==
 
==Mystery of the Orientation==
 +
As we move our coaster along the track, not only do we have to translate it, we must rotate it to look natural as well. How do we achieve this?
 +
 +
[[File:Axisrotation00.PNG|400px]]
 +
 +
Well, since rotating the whole pod should be achievable by rotating the toWorld, let's think of this in terms of the toWorld's axis.
 +
 +
[[File:Axisrotation01.PNG|400px]]
 +
 +
Our goal is to transform the axis on the left, to the one on the future. This is looking very much like a coordinate transformation, much like what we did with our cameras! (If coordinate transform doesn't ring a bell, read up on the [[Media:03_ProjectionS16.pdf|Projection lecture]] to see how coordinate transformation are defined.)
 +
 +
Remember that the coordinate transformation matrix can be found by finding the x, y, and z basis vectors and the translation. So how will we go about finding those x, y, and z?
 +
 +
First off z is most simple right? It's simply the direction our pod is moving down the curve. In other words, it will be:
 +
<pre>Z = target - pos</pre>
 +
Well, we're not quite done yet though. We have to normalize that Z so that we don't unintentionally introduce a scale factor.
 +
<pre>Z = normalize(target - pos)</pre>
 +
 +
Next, between X and Y, which do we look for first? Think back to the order in which we calculated the Camera Matrix. Only one of these is certain from Z, and that's going to be the X vector. As long as our pod is staying upright, we can assume our up vector is going to be <code><0, 1, 0></code>, i.e. straight up in world coordinates. Given Z and up, we can find the vector that is perpendicular, to both of them, which will be our X vector.
 +
<pre>X = normalize(cross(Z, <0, 1, 0>))</pre>
 +
 +
Now, finally we can find the final Y axis, by again finding the vector that is perpendicular to both the Z and X. Be careful of your ordering!
 +
<pre>Y = normalize(cross(x, Z))</pre>
 +
 +
We can now complete this picture and find the basis vectors:
 +
[[File:Axisrotation02.PNG|400px]]
 +
 +
Again, if you're not sure what to do with the bases once you've found them, refer back to the [[Media:03_ProjectionS16.pdf|Projection lecture]].
  
 
==Point Control==
 
==Point Control==

Revision as of 13:39, 17 May 2016

Overview

Week 8 Discussion recap(05/16/16)

Slides: Download here

Mystery of the Orientation

As we move our coaster along the track, not only do we have to translate it, we must rotate it to look natural as well. How do we achieve this?

Axisrotation00.PNG

Well, since rotating the whole pod should be achievable by rotating the toWorld, let's think of this in terms of the toWorld's axis.

Axisrotation01.PNG

Our goal is to transform the axis on the left, to the one on the future. This is looking very much like a coordinate transformation, much like what we did with our cameras! (If coordinate transform doesn't ring a bell, read up on the Projection lecture to see how coordinate transformation are defined.)

Remember that the coordinate transformation matrix can be found by finding the x, y, and z basis vectors and the translation. So how will we go about finding those x, y, and z?

First off z is most simple right? It's simply the direction our pod is moving down the curve. In other words, it will be:

Z = target - pos

Well, we're not quite done yet though. We have to normalize that Z so that we don't unintentionally introduce a scale factor.

Z = normalize(target - pos)

Next, between X and Y, which do we look for first? Think back to the order in which we calculated the Camera Matrix. Only one of these is certain from Z, and that's going to be the X vector. As long as our pod is staying upright, we can assume our up vector is going to be <0, 1, 0>, i.e. straight up in world coordinates. Given Z and up, we can find the vector that is perpendicular, to both of them, which will be our X vector.

X = normalize(cross(Z, <0, 1, 0>))

Now, finally we can find the final Y axis, by again finding the vector that is perpendicular to both the Z and X. Be careful of your ordering!

Y = normalize(cross(x, Z))

We can now complete this picture and find the basis vectors: Axisrotation02.PNG

Again, if you're not sure what to do with the bases once you've found them, refer back to the Projection lecture.

Point Control