OpenGL - движущаяся камера с мышью

Функционально никогда, кроме ранее упомянутой цели "хвастовства".

Строки! = эффективность. Часто отношения являются обратными, по моему опыту (хотя не строго, специально для экстремального значения, по очевидным причинам)

5
задан 15 September 2009 в 10:47
поделиться

4 ответа

Похоже, ваше приложение страдает от блокировки подвеса . Есть несколько способов исправить это, самый простой - ограничить допустимые повороты.

2
ответ дан 13 December 2019 в 05:38
поделиться

Вы используете углы Эйлера, и у вас возникла проблема с блокировкой кардана.

Простое решение - сохранить вращение внутри вашей модели-матрицы и повернуть эту матрицу вместо сохранения только двух углов (с помощью умножения матриц).

Посмотрите этот ответ для получения дополнительной информации: Приведет ли это к блокировке кардана?

более сложным решением является хранение кватернионов

4
ответ дан 13 December 2019 в 05:38
поделиться

Поскольку вы используете GLUT, у вас, вероятно, есть код для решения этой проблемы в вашей системе. Поищите исходные файлы trackball.c и trackball.h. Поиск по ним также найдет источник. Это простая библиотека, которая поможет вам решить именно эту проблему. Некоторые примеры GLUT, в которых они используются: dinospin, bounce и т. Д.

0
ответ дан 13 December 2019 в 05:38
поделиться

Большинство приложений допускают вращение вверх / вниз только на 90 градусов; в противном случае вид будет перевернутым, а да, слева направо - обратным. Для большинства приложений нет смысла вращаться так далеко, чтобы вы смотрели на мир вверх ногами.

Кроме того, это не карданный замок, как сказали два других респондента; карданный замок требует трех (или более?) осей вращения. Проще говоря, блокировка кардана - это когда одна ось повернута на 90 градусов в любом направлении, так что две другие оси совпадают; а затем вращение вокруг любой из двух других осей вызывает тот же эффект. Изображение самолета на полпути вниз по странице википедии это хорошо видно.

В любом случае, лучше всего ограничить camera_angle_v диапазоном (-90,90); другими словами, всякий раз, когда вы добавляете или вычитаете его, проверяйте, не

2
ответ дан 13 December 2019 в 05:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: