Почему они не просто реализуют это как единый вектор вращения Эйлера, упрощая практически каждый фрагмент кода для использования библиотеки?
Потому что это «не упрощает практически каждый кусок кода, чтобы когда-либо использовать библиотеку». Углы Эйлера распространены в инструментах моделирования, учебных пособиях и коде, написанных людьми, которые плохо знакомы с графикой. Но когда серьезным графическим приложениям приходит время представлять ориентацию объекта, это обычно делается в виде самой матрицы или кватерниона. Последний из которых можно считать кодированием угла / оси вращения.
Матрицы и кватернионы могут быть составлены. Эйлер углы не могут. Кватернионы можно плавно интерполировать, что позволяет анимацию персонажей. Интерполяция нескольких углов Эйлера приводит к очень неудачным результатам. Применение осевого вращения к углам Эйлера подчиняется блокировке подвеса; применение поворотов к ориентации (матрица или кватернион) не делает. И пр.
Углы Эйлера - своего рода ловушка для новичков. Это то, что очень легко понять, но в конечном итоге не очень полезно в большинстве распространенных случаев. Лучше иметь API, которые не обслуживают такие ловушки.
Действительно, не существует ни одного набора углов Эйлера; порядок, в котором 3 осевых вращения применяются в вопросах результатов. Если вы применяете одинаковые углы в другом порядке, вы получите другой результат. А люди, которые используют углы Эйлера, обычно выбирают разные порядки углов Эйлера в зависимости от своих потребностей.
Так что наличие функции glm::rotate
, которая выбирает определенный порядок Эйлера, было бы бесполезно для тех, кому нужен другой.