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

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?

It looks like you are confusing rows and columns in your matrices, either in the way your load or store them, or when you perform the matrix×vector multiplication. The w coordinate should always yield 1 with the matrices you are using.