Converting to and from local and world 3D coordinate spaces?

Posted by James Bedford on Game Development See other posts from Game Development or by James Bedford
Published on 2011-03-06T11:28:32Z Indexed on 2011/03/06 16:19 UTC
Read the original article Hit count: 459

Filed under:
|
|
|

Hey guys,

I've been following a guide I found here (http://knol.google.com/k/matrices-for-3d-applications-view-transformation) on constructing a matrix that will allow me to 3D coordinates to an object's local coordinate space, and back again. I've tried to implement these two matrices using my object's look, side, up and location vectors and it seems to be working for the first three coordinates. I'm a little confused as to what I should expect for the w coordinate.

Here are couple of examples from the print outs I've made of the matricies that are constructed. I'm passing a test vector of [9, 8, 14, 1] each time to see if I can convert both ways:

Basic example:

localize matrix:
Matrix: 0.000000    -0.000000   1.000000    0.000000
        0.000000    1.000000    0.000000    0.000000
        1.000000    0.000000    0.000000    0.000000
        5.237297    -45.530716  11.021271   1.000000
globalize matrix:
Matrix: 0.000000    0.000000    1.000000    0.000000
        -0.000000   1.000000    0.000000    0.000000
        1.000000    0.000000    0.000000    0.000000
        -11.021271  -45.530716  -5.237297   1.000000

test:
Vector4f(9.000000, 8.000000, 14.000000, 1.000000)
localTest:
Vector4f(14.000000, 8.000000, 9.000000, -161.812256)
worldTest:
Vector4f(9.000000, 8.000000, 14.000000, -727.491455)

More complicated example:

localize matrix:
Matrix: 0.052504    -0.000689   -0.998258   0.000000
        0.052431    0.998260    0.002068    0.000000
        0.997241    -0.052486   0.052486    0.000000
        58.806095   2.979346    -39.396252  1.000000
globalize matrix:
Matrix: 0.052504    0.052431    0.997241    0.000000
        -0.000689   0.998260    -0.052486   0.000000
        -0.998258   0.002068    0.052486    0.000000
        -42.413120  5.975957    -56.419727  1.000000

test:
Vector4f(9.000000, 8.000000, 14.000000, 1.000000)
localTest:
Vector4f(-13.508600, 8.486917, 9.290090, 2.542114)
worldTest:
Vector4f(9.000190, 7.993863, 13.990230, 102.057129)

As you can see in the more complicated example, the coordinates after converting both ways loose some precision, but this isn't a problem. I'm just wondering how I should deal with the last (w) coordinate? Should I just set it to 1 after performing the matrix multiplication, or does it look like I've done something wrong?

Thanks in advance for your help!

© Game Development or respective owner

Related posts about 3d

Related posts about coordinates