Это помогает хорошо понять теорию вещей, прежде чем пытаться реализовать и использовать ее самостоятельно. Ниже приведены две вводные статьи об использовании кватернионов для вращений. Оба в первую очередь связаны с плавной интерполяцией вращения и предотвращением блокировки карданного подвеса в накопленных оборотах:
Gamedev.net - Quaternion Powers
Гамасутра - вращающиеся объекты с использованием кватернионов
Теперь, когда речь идет о реальном коде, я бы предложил получить и использовать библиотеку векторной математики "промышленного уровня", а не свою собственную. Моим предложением было бы получить часть LinearMath проекта программного обеспечения Bullet Physics Middleware. Физика пули и входящая в ее состав линейная математическая библиотека разработаны некоторыми ведущими инженерами Sony и активно развиваются в течение многих лет. Он находится в свободном доступе, не ограничен никакими лицензиями (лицензия Zlib) и используется профессиональными разработчиками игр по всему миру. Библиотека кроссплатформенная / архитектура и компилируется на любом устройстве от iPhone до PS3.
Библиотека предлагает класс Quaternion , который позволяет создавать кватернионы из углов Эйлера или из поворота вокруг произвольной оси, например, используя setEulerZYX . Как только у вас есть кватернионы, есть встроенные функции для всех общих операций, применимых к ним; плюс, минус, мул, нормализовать, сперлить и многое другое.
Для фактического применения вашего последнего кватерниона к рендерингу OpenGL класс Transform позволяет вам построить матрицу из кватерниона. Класс преобразования, в свою очередь, включает в себя функцию getOpenGLMatrix , которая напрямую предоставляет вам совместимую матрицу для передачи в OpenGL.
Библиотека также содержит множество других очень полезных матричных и векторных классов и функций.
Получите последнюю версию Bullet dist от google code или получите только часть кода LinearMath непосредственно из Subversion, используя: svn checkout http://bullet.googlecode.com/svn/trunk/src/LinearMath