Damnit, I wrote a much longer reply but it must have been eaten by the power goblins (

http://www.penny-arcade.com/view.php3?date=2002-11-25&res=l ).

Basically, matricies can be thought of as 4 vectors, typically aranged vertically, which are the x, y and z axies and a translation. Thus you perform a rotation/scale/shear by messing with the vectors, and can represent any arbitary transformation in a single matrix. By multiplying two matricies together you form a new matrix with is the result of both transforms. By multiplying a point by a matrix, it is transformed by the operations represented in the matrix. You transform a vector in the same way, except that you don't perform any translation.

Spaces then.. World space is your entire virtual universe, with some arbitrary reference point. This origin may be a corner of your level, middle of your heightmap, center of the earth etc. It contains everything that is 'physical' in your game (and a few things that aren't

) Object space is a things personal coordinate system - say when you create your 3d model, this is where the origin is, the center of a ball, the feet of a person, etc. Camera space is that with the origin centered on the camera, usually with the x axis going left/right, the y up and the z into the screen.

Moving from one space to another is (easily?) represented by a matrix transformation. So, object->world will be how your model should be positioned in the world in regard to everything else. World->camera defines how a world is viewed, the world is moved into the camera space at the correct position, and hence the camera appears to move around the world. Then usually you multiply by a projection matrix to collapse the whole scene (still fully 3d and orientated around the camera) into a single flat plane - possibly appying perspective whilst doing so. Now wash, rinse and repeat for every single vertex, and you're halfway to having a complete frame drawn..

Moving

*backwards* along this chain is done by multiplying by the inverse matrix at each point (note that you can't usually undo the projection matrix though, you'll get a line in space, not a point). Finding the inverse of a matrix is something i've managed to avoid so far, the maths gets a tad sticky. There may be a function in j3d for this, I can't remember though.

That may or may not have made no sense at all

Hopefully it gives you some ideas though..