Original Post
Hay, I finded very nesty problem when I parse B3D file (Blitz3D format). Everything is OK when I have static object (no key frame animation - or in B3D language : no "KEYS" chunks). My render function just use recursion for applaying transformation from parent to all children like: // pseudo B3D::Update(world) { accumulated_transform = transform * world // or vice-versa i'am not sure if (childrens) childrens->Update(accumulated_transform) if (siblings) siblings->Update(world) } to make key-frames to work I added something like: // pseudo B3D::Update(world) { accumulated_transform = anim->transform * world anim = anim->next if (childrens) childrens->Update(accumulated_transform) if (siblings) siblings->Update(world) } Please note that upper code, maybe, is not correct but suppose that this part is OK (becuase it works if NODE transform is at origin: translation (0,0,0), rotationquaternion(1,0,0,0) ). What is annoying is case when NODE have position (translation) eg. (1,1,1) and keys have translation keys: (2,2,2), (3,3,3), ..., (10,10,10). Mostly becuase first animation key have accumulated tranformation from node. One solution is upper Update methode but when I rotate and translate object object (NODE has rotation and translation now) and KEYS have translations: NODE {Pos, Quaternion} KEYS: {Pos1}, {Pos2}, ..., {PosN} So. when I applay upper Update methode i ommited NODE's rotation in accumulated_transform (anim->transform have PosX matrix). This is just one case but there is more (like: NODE has rotation and KEYS have translations)... Any help or idea? Notice that is just our test file format. Until we find what are real need B3D is OK. P.S. Please note that I am not natural english speeker so any mistakes goes on my account :) Thanks, Zaharije Pasalic