   How store the rotation/scale/position data?
  Short version:Do you store data in matrices AND differently (e.g.: rotation matrix and a float rotation value) or just in matrices? If you use both, how do you sync them? (e.g: after a zoom, everything got scaled. How update the position and scale values stored not in matrices?)Much more elaborate, probably not necessary:I, for example, need to position my 2D sprites in world coordinates. Now I store that information in a Vector.(simple x,y coords). Rotation is stored as a float value, and scale aswell. Now, when I want to scale, rotate or translate my 2D sprite, I'll do that by writing sprite->SetTransform. That multiplies my transformation matrix with the preexisting sprite world matrix. I suppose I could write sprite->GetTransform and simply (?) extract the translation/scale/rotation vectors from it anytime.But how -should- you do it? My previous vector is now holding old, useless coordinates from before the transformation. I can't imagine that this is right!Do I seriously need to manually extract the translation vector from the matrix GetTransfrom() call --> each frame?!Another example: Suppose I decide to apply a rotationmatrix to my sprite. Now my float rotation value is off, I'd have to reset that value everytime I decide to rotate. Suppose I scale my sprite...now the vector containing the world position of my sprite is totally wrong, since the texture got scaled but the position was not updated.   
  Personally I just store everything in a matrix, and then derive anything else I need from that matrix.  Translation is pretty easy...it's right in _41, _42, and _43 elements of the world matrix.  So if you need to get it for a GetPosition method, you can just pull them out.  If you need to set them, you just set those elements directly.Rotation and scale are a little trickier to pull out, but you can use D3DXMatrixDecompose to pull those out if you need them.  You can also use D3DXQuaternionRotationMatrix to get your rotation as a quaternion, if you just need that.   ;  I made a transform class.It holds position in a D3DXVECTOR3It holds rotation in a D3DXQUATERNIONA model, model part, or camera, then may contain or derive from this class. The transform class has an interface for translation, rotation, and slerp methods that act on the mentioned stored componenets. On rendering I call an update function on the transform class and construct a matrix from the position and rotation. The final matrix is passed to my shader for use in rendering.It does contain small floating point errors though.Some people seperate further into a facing direction, then derive an object's right axis from that, normalize them both, then normalize rotation, and then construct a matrix.   ;  Seems like the best way is to have separate matrices for translation, rotation and scale lying around and before rendering applying them to the worldmatrix each time anew. Unfortunately there are cases where this leads to subtle and really hard to find bugs. I couldn't think of anything to solve that yet: Suppose I set the position of my sprite by calling SetPosition() which in turn updates my translation matrix responsible for the position. The next line of code would change the scale of my sprite.In the next line I'll call GetPosition() which takes _41,_42 of the worldmatrix. What happens? I get a position which does not yet take the scaling into account, since the worldmatrix will only be updated at the end of the frame.This is a headache, because neither can I return the translation matrix in GetPosition(), since this will NEVER take scale into account :/