mrjbom
@mrjbom

Как ограничить FPS в OpenGL и glut?

Всё не могу разобраться с проблемой ограничения FPS, мне нужно установить фиксированное число, как мне это сделать? В idle-функции у меня находиться glutPostRedisplay(), там же и нужно ставить ограничение, но как?
  • Вопрос задан
  • 1542 просмотра
Решения вопроса 1
@MarkusD Куратор тега C++
все время мелю чепуху :)
Само ограничение частоты кадров делается очень просто. Снаружи idle-функции нужно содержать переменную с временем последнего вызова idle-функции, а в самой функции нужно просто накопить дельту частоты кадров и вызвать glutPostRedisplay.
double GetCurrentTime()
{
	using Duration = std::chrono::duration<double>;
	return std::chrono::duration_cast<Duration>( 
		std::chrono::high_resolution_clock::now().time_since_epoch() 
	).count();
}

const double frame_delay = 1.0 / 60.0; // 60 FPS
double last_render = 0;
void OnIdle()
{
	const double current_time = GetCurrentTime();
	if( ( current_time - last_render ) > frame_delay )
	{
		last_render = current_time;
		glutPostRedisplay();
	}
}


Данный код является сильно упрощенным механизмом, лишь показывающим общий принцип ограничения частоты кадров. Его можно применять там, где не требуется точный контроль дельты между кадрами. К слову, представление времени в типе double помогает легче находить дельту между кадрами и контролировать ошибку дельты.
Для более точного контроля частоты кадров стоит обратиться, например, к такому материалу.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@sddvxd
Если нужно 60 FPS, то получить текущее время, секунду поделить на 60 и каждые 1/60 секунды обновлять кадр
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы