Members - Reputation: 125
Posted 19 November 2012 - 10:20 AM
I am importing various animations from PowerVR POD files. I need conversions from matrices to quaternions & stuff, as I want to implement animation blending and inter-frame interpolation.
My problem is that, when reading data exported from powervr as quaternions, translations and rotations, matrices converted from those TRS does not equal ( even by far ) the matrices read if I export the models with matrices.
Also, if I try to decompose the matrix into TRS, after extracting the scaling component, the resulting matrix is not a rotation matrix: columns are unit length, but rows aren't ( I have removed the translation component ).
For example, when I export as matrices ( model has about 100 bones, with about 250 frames ), the 11174 matrix is, COLUMN ORDERED:
but, when I export as TRS, the 11174 set of parameters are:
Trans = (-0.116999, -0.340356, -0.732254)
Scale = (0.418738, 0.982837, 0.725079)
Quat = (0.000000, -0.000002, 0.778976, 0.627054)
I have checked and by no means the TRS could be converted to a matrix that comes even close to the one read from powervr.
Objects are read from the POD file as follow:
translation: Vector3(&(node->pfAnimPosition[j * 3]));
node->pfAnimRotation[j * 4 + 0],
node->pfAnimRotation[j * 4 + 1],
node->pfAnimRotation[j * 4 + 2],
node->pfAnimRotation[j * 4 + 3]
scale: Vector3(&(node->pfAnimScale[j * 7]))
Perhaps there is some bug in my conversion code although I have checked 1000 times, also I have created random translation, rotations and scaling and converted to matrices and then converted back to TRS and got the same values. That's why I have put here the parameters read from POD file.
From imgtec site I received no answer.
Or perhaps the frame matrices does not come from a simple T*R*S transform and there is something more.
Animations are done in 3dmax.
Any solution or explanation for this is welcome.
Useless to say, the model, when used with matrices that come from TRS read from the POD file, deforms horribly. The first frame looks good, but the following not.