IMO, самый «удобный для пользователя формат» для вращения - это сохранение углов Euler XYZ, это, как правило, то, как вращаются в любом программном обеспечении для создания 3D-контента.
Углы Эйлера легко преобразовать в матрицы, см. здесь для задействованного матричного продукта.
Но не следует путать формат, заданный для GUI / пользователя, и формат хранения данных: углы Euler XYZ имеютС их собственными проблемами при выполнении анимации блокировка карданного подвеса может привести к нежелательному поведению.
Другим кандидатом для хранения / вычисления поворотов является кватернионы .Они предлагают математические преимущества перед углами XYZ, особенно при интерполяции между двумя поворотами.Конечно, вы не хотите предоставлять значения кватернионов непосредственно любому пользователю, вам нужно преобразовать их в углы XYZ.Вы найдете много кода для этого в Интернете.
Я бы не рекомендовал хранить вращение непосредственно в матричном формате.Извлечь из него удобные для пользователя значения сложно, он не предлагает никакого интересного поведения для анимации / интерполяции, он требует хранения.IMO, матрицы должны создаваться, когда необходимо преобразовать геометрию.
В заключение, есть несколько вариантов, вы должны выбрать то, что подходит вам больше всего.Планируете ли вы иметь анимацию или нет?и т. д.
РЕДАКТИРОВАТЬ Кроме того, вам не следует создавать амальгаму с матрицами моделей и видов.Они семантически сильно различаются и объединяются в OpenGL только по соображениям производительности.То, что я имел в виду выше, в «матрице моделей».Матрица просмотра обычно предоставляется вашей системой наблюдения / менеджером камеры и комбинируется с вашей матрицей модели.