Invert quaternion X,Z rotation

Recommended Posts

JackM    103

Hi everyone,

I have a device that returns me all four components of a quaternion (X,Y,Z,W).
The problem is that,the rotation around the X and Z axis are inverse (i rotate the device left,i get a right rotation etc)
For what i know that quaternion rapresent orientation referring to an 'arbitrary' axis so i can't just negate the rotation like i would do with euler angles as far as i know
My code is:

Quaternion rotation = new Quaternion(X,Z,Y, -W);  //i had to swap Z and Y due to the device axis orientation so i had to negate W
model.World = Matrix.CreateFromQuaternion(rotation)*Matrix.CreateTranslation(Vector3.Zero);


Any ideas on how i can invert the rotation around X and Z?

Share on other sites
alvaro    21247

Where did you get X, Y, Z and W from? Can you describe the "device axis orientation" and in general your coordinate conventions in more detail?

Share on other sites
DonTzzy    487

The problem is that,the rotation around the X and Z axis are inverse (i rotate the device left,i get a right rotation etc)

I think your device is using left-handed coordinates, and your code is using right-handed coordinates (or the other way around.)

Quaternion rotation = new Quaternion(X,Z,Y, -W); //i had to swap Z and Y due to the device axis orientation so i had to negate W

Try:

Quaternion rotation = new Quaternion(X, Y, -Z, W);

Share on other sites
JackM    103

The problem is solved,i don't know why but for some strange reason (maybe not if someone knows the math behind quaternion,which i don't)

negating both Z and Y axis gave the correct results.

Basically now eveything is working with:

Quaternion rotation = new Quaternion(X, -Z, -Y, -W);


I tried before to negate one axe but instead of inverting the orientation,it was like swapping axis again.

Thanks.

Share on other sites
alvaro    21247

You can try negating only X instead of Y, Z and W. Not that it matters much, but perhaps it's easier to think of what that does.