Функционально никогда, кроме ранее упомянутой цели "хвастовства".
Строки! = эффективность. Часто отношения являются обратными, по моему опыту (хотя не строго, специально для экстремального значения, по очевидным причинам)
Похоже, ваше приложение страдает от блокировки подвеса . Есть несколько способов исправить это, самый простой - ограничить допустимые повороты.
Вы используете углы Эйлера, и у вас возникла проблема с блокировкой кардана.
Простое решение - сохранить вращение внутри вашей модели-матрицы и повернуть эту матрицу вместо сохранения только двух углов (с помощью умножения матриц).
Посмотрите этот ответ для получения дополнительной информации: Приведет ли это к блокировке кардана?
более сложным решением является хранение кватернионов
Поскольку вы используете GLUT, у вас, вероятно, есть код для решения этой проблемы в вашей системе. Поищите исходные файлы trackball.c и trackball.h. Поиск по ним также найдет источник. Это простая библиотека, которая поможет вам решить именно эту проблему. Некоторые примеры GLUT, в которых они используются: dinospin, bounce и т. Д.
Большинство приложений допускают вращение вверх / вниз только на 90 градусов; в противном случае вид будет перевернутым, а да, слева направо - обратным. Для большинства приложений нет смысла вращаться так далеко, чтобы вы смотрели на мир вверх ногами.
Кроме того, это не карданный замок, как сказали два других респондента; карданный замок требует трех (или более?) осей вращения. Проще говоря, блокировка кардана - это когда одна ось повернута на 90 градусов в любом направлении, так что две другие оси совпадают; а затем вращение вокруг любой из двух других осей вызывает тот же эффект. Изображение самолета на полпути вниз по странице википедии это хорошо видно.
В любом случае, лучше всего ограничить camera_angle_v
диапазоном (-90,90); другими словами, всякий раз, когда вы добавляете или вычитаете его, проверяйте, не