A local space is one that is used as a reference for a given set of co-ordinate tuples, so to say. Whether the given set is a mesh, particle system, single particle, skeleton, bone, parented entity frame, ... is irrelevant for this purpose.

To re-interpret the co-ordinates given in a more-local space to a less-local (a.k.a. more-global) space, you multiply the co-ordinates with the transformation build from the placement of the co-ordinate frame of the more-local space with respect to the more-global space (in the following written for row vectors):

**p**_{n-1} :=

**p**_{n} *

**T**_{n-1}
This can be done a step further to the next more-global space

**p**_{n-2} :=

**p**_{n-1} *

**T**_{n-2} =

**p**_{n} *

**T**_{n-1} *

**T**_{n-2}
up until stopping at a space that is in this sense super-ordinated to all the local spaces; then this one is called the global space (or "world").

This can be done in the other direction, too: You can re-interpret co-ordinates given in some more-global space in a more-local space. This is done by using the inverse transformation, because you just need to invert the equations given above. E.g.

**p**_{n-1} =

**p**_{n} *

**T**_{n-1 } <==>

**p**_{n-1} *

**T**_{n-1}^{-1} =

**p**_{n} *

**T**_{n-1} *

**T**_{n-1}^{-1}
so that

**p**_{n} =

**p**_{n-1} *

**T**_{n-1}^{-1}
Something like that is done in the code snippet shown in the OP: You apply the inverse transformation to the camera's position. Assuming that the camera's position was given in global space before, you re-interpret it now in a local space. From the comments I see that the original transformation is the one that places the particle system in the world. So at the end you have transformed the world position of the camera so that is given now w.r.t. the local space of the particle system.

BTW: Notice please that I've written "re-interpret" above. This is because the "world" doesn't really change due to those transformations. You just alter the way you look at it.

**Edited by haegarr, 29 December 2012 - 03:27 AM.**