В последнее время я занимаюсь программированием openGL, и он вызывает преобразование базовой матрицы, такое как перевод, вращение и масштабирование. При выполнении вращения возникают некоторые проблемы. Вот мой вопрос.Постоянный угол поворота OpenGL
Теперь я использую переменную rotationDegree и переменную rotationStepSize для управления вращением. Когда флаг поворота на
//inside paintGL function
if(rotationFlag is on)
rotationDegree += rotationStepSize
if(rotationDegree > 360.0f)
rotationDegree -= 360.0f
Вот странное дело, Так как я определяю rotationStepSize быть очень маленьким, вращение начинается очень медленно, но со временем увеличивается, оно становится все быстрее и быстрее!
я придумал два объяснения этого явления:
- 360f не диапазон значений для параметра степени в GLM :: вращать
- Программа начинается медленно, в результате чего paintGL краситься для экрана меньше. Затем, когда программа становится устойчивой (или другой параметр не меняется), mainLoopEvent выполняет все быстрее и быстрее, заставляя paintGL рисоваться больше.
Кто-нибудь знает, как решить эту проблему? Я googled об использовании glutget (GL_TIME_ELAPSED), но на моей машине эта функция сообщает «glutget: missing ENUM handle», что указывает на то, что мой файл переполнения не завершен, я думаю?
Так кто-нибудь знает, как исправить проблему перечисления или как обойти это, чтобы создать сцену, где у меня есть объект, вращающийся с постоянной скоростью?
Большое спасибо!
только ставку, но есть вы используете 'glLoadIdentity' или любой другой метод сброса матрицы? если нет, то вы вращаете уже повернутую матрицу, означающую, что приращение шага - это скорость. – Spektre
Извините, я не был в курсе деталей вопроса. Я использую новый openGL, способный программировать конвейер. Каждый раз, когда я буду переводить объект обратно в начало координат, поверните его на степень, указанную в rotationDegree, и переведите объект обратно в исходное положение. Все они помещаются внутри одной матрицы, и затем я передам эту матрицу modelToWorld в вершинный шейдер. –
точка остается проверить, является ли матрица единицей (или в определенном начальном состоянии) перед каждым фреймом ... – Spektre