| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Мультимедия, OpenGL/DirectX > Как оптимизировать анимацию в OpenGL |
| Автор: AntZ 22.1.2008, 13:02 |
| Вобщем уже давно пользуюсь библиотекой glut.h и для анимации использовал функцию IdleFunc + таймер делал используя библиотеку time.h, а позже нашел TimerFunc. Но проблема одна и та же! Всегда идет загрузка процессора на 100%... Однако, если написать программку в Win32, то используя тамошний таймер загрузки процессора почти что нету!!! Я бы так и делал если бы у нас в университете не приходилось компилировать программы на Linux... В этом случае независимый ОС глют незаменим. Вот вобщем-то и вопрос: Как можно оптимизировать работу глютовских программ, чтобы они не грузили проц??? P.S. В архиве glut и программка, которая рисует шахматные фигуры линиями, б-сплайнами и безье и вертит их. Если даже выводить одну шахматную фигуру или даже ничего не рисовать (в функции myDisplay только очищать экранчик и свапать буффер), то все равно идет загрузка процессора на 100%!!! Что делать? Ума не приложу... P.P.S. Я программирую полностью на glut.h не используя операционно зависимые библиотеки. Потому-что компилирую дома под Виндовс, в универе под Линукс. |
| Автор: Lazin 22.1.2008, 13:12 |
| а в библиотеке glut нет чего-нибудь вроде Sleep? |
| Автор: AntZ 22.1.2008, 16:44 |
Гадать и я могу... А вот есть кто-нибудь кто знает как с ОпенГЛ обращаться? Или в этом разделе только с ДиректомИКС умеют работать????? p.s. Слипа нету... Для этого таймер вобщем-то и придумали... |
| Автор: sgi1981 22.1.2008, 20:58 |
| Программируй используя Wiggle. И таймер можно не использовать. Просто в конце кода по обработке сообщения о необходимости перерисовки указываешь InvalidateRect(hWnd ,NULL, 0); то есть требуется повторная перерисовка, и Windows через некоторое время снова вызовет оконную функцию с сообщением о том что нужна перерисовка. |
| Автор: antropod 23.1.2008, 10:27 | ||||||
Могу я как вариант кросс-платформенной библиотеки предложить http://libsdl.org?
Вместо glutDisplayFunc обрабатываешь сообщение SDL_VIDEOEXPOSE, вместо glutReshapeFunc - SDL_VIDEORESIZE. Вместо glutPostRedisplay
Ну и так далее. Самое главное - есть функция SDL_Delay(..)
|
| Автор: AntZ 24.1.2008, 00:11 |
| 2 antropod. Спасибо за совет!!! Пожалуй посмотрю что можно сделать с ее помощью... Единственное но... Преподы знают тока ОпенГЛ, точнее лишь Глют... Поэтому SDL буду использовать только для себя Однако, может, я его еще не знаю... Вдруг это решение... Вопрос еще открыт... |
| Автор: Rickert 28.1.2008, 08:12 |
| AntZ, мой совет, не использовать glut. Я всегда его обхожу. Стандартная Xlib библиотека и прикручивай к ней OpenGL. Не вижу необходимости в использовании glut. Поставь на машину vmware и разверни на ней линукс, там и кодь. |