Any good libraries for quaternion calculations in C/C++ ?
Side note: any good tutorials/examples? I’ve google it and been to the first few pages but maybe you have have some demos/labs from compsci or math courses you could/would share?
I’m a fan of the Irrlicht quaternion class. It is zlib licensed and is fairly easy to extract from Irrlicht:
You could try with Boost – usually good place to start with. They have a dedicated sublibrary for that.
As for the examples look at the documentation and the unit tests that come along with Boost.
There’s Eigen, a templated library of math and geometry stuff used in Blender and by KDE programs, which has a slick Quaternion class defined in a single .h file.
If you decide to roll your own, or actually want to understand the math behind the code (useful for debugging), I highly recommend Martin Baker’s website. It looks primitive, but the explanations are thorough and easy to follow, and he also provides code in places.
DirectX has its own quaternion functions, as do several other 3D libraries.
In my opinion, the best way to learn how quaternions work is to plow through the math yourself. The Wikipedia page on quaternions and conversion contain all the formulas you need. I wrote my own quaternion library from that 🙂 (It’s in Haskell, so I won’t bother to post it.)
For documentation on quaternions, check out 3D graphics text books. They are simply matrices that produce the effect of 3D rotation using multiplication instead of computationally expensive trigonometry.
This web, euclideanspace, is very important if you are working with quaternions. It has all arithmetic step by step, equivalences, simplifications, code samples in different languages. I made most of my functions on my own following this page. I prefer that than downoading a library. Functions are easy to program and you learn on the way.
As an example I suggest you to check this c++ function about a quaternion multiplication:
Efficient C++ quaternion multiplication using cv::Mat
There is graphene which is a simple C/GObject library with SIMD optimisations for various vector, matrix, quaternion, etc calculations that are common in 3D graphics.