Когда я вращаю объект в OpenGL, ось также вращается вместе с объектом.
Преобразование не вращает объект, оно вращает систему координат. Цепные вращения некоммутативны. Итак, вам нужно просто: поменять операции поворота, чтобы первое примененное вращение, т. Е. Последнее умножение в стеке, обозначало вращение вашего объекта, а затем (т.е. ранее умноженное) с другим вращением.
Кстати: в комментарии вы написали:
Я сохраняю предыдущее преобразование с помощью glGetDoublev, а затем перед применением нового вращения загружаю эту матрицу с помощью glLoad, а затем умножаю ее на новую матрицу вращения. В моем приложении я должен сериализовать объект на диске, поэтому я сделал это таким образом. Наряду с объектом я также храню матрицу преобразования
Это говорит о том, что вы приняли за OpenGL граф сцены или матричную математическую библиотеку. Это ни то, ни другое. Не используйте OpenGL в качестве «хранилища объектов» (так оно не работает) и не полагайтесь на матричные функции OpenGL (они все равно были удалены из OpenGL-3).