• 12
• 12
• 9
• 10
• 13

# Matrix Inversion XNA

This topic is 3501 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

## Recommended Posts

I have two functions for setting rendering transformations in my scene graph that are called before every scene node is rendered:

public virtual void PreRender(Scene scene)
{
// push a copy of the top matrix onto the stack
scene.MatrixStack.Push ();

// multiply that matrix with the one that
// is already there and replace it with the result
scene.MatrixStack.MultMatrix ( this.sceneProps.ParentSpaceMatrix );

Matrix WorldTrans = scene.MatrixStack.Peek();

//translate world space into screen space
Matrix ScreenMat = scene.Camera.TransformToScreen(WorldTrans);

// now this node is the root of whatever is drawn after it
scene.Transform *= ScreenMat;
}

public virtual void PostRender(Scene scene)
{
// Pop the top matrix off of the stack and get us back up the tree
scene.MatrixStack.Pop ();

// ***Now here is the trouble spot***
// I need to undo the transformation I just did in prerender
// so I invert the matrix
Matrix TransMat = Matrix.Invert ( scene.Transform );

}


I would think that finding the inverse of a matrix each time I rendered a scene node would make my game incredibly slow. I have heard that it could be done quickly for transformation matrices by swapping their rows and collumns or something like that. My questions are: Does XNA take advantage of what I just mentioned and make finding the inverse of a transformation matrix speedy? Is this the right way to go about un doing transformations?