2012-01-10 8 views
0

Когда я поворачиваю объект в OpenGL, ось также вращается вместе с объектом. Есть ли способ избежать этого? В принципе, я хочу добиться последовательных поворотов вокруг одной оси.Вращение оси объекта в OpenGL

Я не очень хорошо знаком с кватернионами, но, читая его, кажется, что это решение. Есть ли другой способ его получить?

+0

Можете ли вы показать свой код с частью умножающих матриц? – SAKrisT

+0

Я сохраняю предыдущее преобразование, используя glGetDoublev, а затем перед применением нового вращения я загружаю эту матрицу glLoad, а затем умножаю ее на новую матрицу вращения. В моем приложении я должен сериализовать объект на диске, поэтому я сделал это так. Наряду с объектом я сохраняю матрицу преобразования. – Aarkan

ответ

0

Когда я поворачиваю объект в OpenGL, ось также вращается вместе с объектом.

Преобразование не поворачивает объект, оно вращает систему координат. Цепные вращения являются некоммутативными. Так что вы должны просто просто: поменять операции вращения, которые применяются первым поворотом, т. Е. Последнее, которое вы умножаете на стек, обозначает вращение вашего объекта, а затем (то есть ранее умноженное) с другим вращением.

КСТАТИ: В комментарии Вы писали:

хранить предыдущее преобразование с помощью glGetDoublev, а затем перед нанесением нового поворота, я загрузить матрицу на glLoad, а затем умножить его с новой матрицей вращения. В моем приложении я должен сериализовать объект на диске, поэтому я сделал это так. Наряду с объектом я также храню матрицу преобразования

Это говорит о том, что вы ошиблись в OpenGL для графа сцены или математической математической библиотеки. Это не так. Не используйте OpenGL в качестве «хранилища объектов» (он не работает так) и не полагаются на функции матрицы OpenGL (они все равно удалены из OpenGL-3).

+0

Я считал openGL для быстрого прототипирования, но мне это действительно не нужно, поскольку я использую его только для манипуляции с матрицами, и я знаю, что openGL не для этого. Не могли бы вы предложить библиотеку, которая может сделать это для меня? Я хочу преобразовать объект, а не ось. – Aarkan

+0

@Aarkan: Матрица математики не очень сложна. Вы можете реализовать его самостоятельно или использовать библиотеку, например http://www.gnu.org/software/gsl/ или LAPACK. Для работы с триангулированной геометрией существует http://gts.sourceforge.net/. Если вы действительно хотите сделать математическую матрицу 4x4, я предоставляю https://github.com/datenwolf/linmath.h, который находится в общественном достоянии. – datenwolf

+0

Спасибо, только одно сомнение. Например, если я использую glm, и я применяю матрицы R1 и R2 для двух поворотов на объекте M, т. Е. Если я выполняю это: R2 * R1 * M, то R2 все еще будет работать на повернутой оси, вызванной вращением R1? – Aarkan

Смежные вопросы