Модераторы: Rickert, Alexeis, BorisVorontsov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как оптимизировать анимацию в OpenGL, Использование Idle, Timer и т.п. 
:(
    Опции темы
AntZ
  Дата 22.1.2008, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.6.2007

Репутация: нет
Всего: нет



Вобщем уже давно пользуюсь библиотекой glut.h и для анимации использовал функцию IdleFunc + таймер делал используя библиотеку time.h, а позже нашел TimerFunc. Но проблема одна и та же! Всегда идет загрузка процессора на 100%...

Однако, если написать программку в Win32, то используя тамошний таймер загрузки процессора почти что нету!!! Я бы так и делал если бы у нас в университете не приходилось компилировать программы на Linux... В этом случае независимый ОС глют незаменим.

Вот вобщем-то и вопрос:
Как можно оптимизировать работу глютовских программ, чтобы они не грузили проц???

P.S. В архиве glut и программка, которая рисует шахматные фигуры линиями, б-сплайнами и безье и вертит их. Если даже выводить одну шахматную фигуру или даже ничего не рисовать (в функции myDisplay только очищать экранчик и свапать буффер), то все равно идет загрузка процессора на 100%!!! Что делать? Ума не приложу...

P.P.S. Я программирую полностью на glut.h не используя операционно зависимые библиотеки. Потому-что компилирую дома под Виндовс, в универе под Линукс.

Это сообщение отредактировал(а) AntZ - 22.1.2008, 21:49

Присоединённый файл ( Кол-во скачиваний: 17 )
Присоединённый файл  figury.zip 75,06 Kb
PM MAIL ICQ   Вверх
Lazin
Дата 22.1.2008, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: нет
Всего: 154



а в библиотеке glut нет чего-нибудь вроде Sleep?
PM MAIL Skype GTalk   Вверх
AntZ
  Дата 22.1.2008, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.6.2007

Репутация: нет
Всего: нет



Цитата(Lazin @  22.1.2008,  13:12 Найти цитируемый пост)
а в библиотеке glut нет чего-нибудь вроде Sleep? 

Гадать и я могу... А вот есть кто-нибудь кто знает как с ОпенГЛ обращаться? Или в этом разделе только с ДиректомИКС умеют работать?????

p.s. Слипа нету... Для этого таймер вобщем-то и придумали...
PM MAIL ICQ   Вверх
sgi1981
Дата 22.1.2008, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 284
Регистрация: 16.3.2006

Репутация: нет
Всего: 10



Программируй используя Wiggle.
И таймер можно не использовать. Просто в конце кода по обработке сообщения о необходимости перерисовки указываешь InvalidateRect(hWnd ,NULL, 0); то есть требуется повторная перерисовка, и Windows через некоторое время снова вызовет оконную функцию с сообщением о том что нужна перерисовка. 


--------------------
Тело в нашем пространстве - есть часть пространства, в которой пространство обладает дисторсией относительно внешнего пространства.
PM MAIL   Вверх
AntZ
Дата 22.1.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.6.2007

Репутация: нет
Всего: нет



Цитата(sgi1981 @  22.1.2008,  20:58 Найти цитируемый пост)
Программируй используя Wiggle.
И таймер можно не использовать. Просто в конце кода по обработке сообщения о необходимости перерисовки указываешь InvalidateRect(hWnd ,NULL, 0); то есть требуется повторная перерисовка, и Windows через некоторое время снова вызовет оконную функцию с сообщением о том что нужна перерисовка.  

Как я понял Wiggle это библиотека под Винду. Но мне нельзя использовать что-то от винды, т.к. в универе я сдаю прогу под Линуксом. А GLUT позволяет компилировать код и в Винде и в Линуксе ничего в нем не меняя.

В Win32 приложении я и так могу понизить загрузку проца, даже устранить, но мне нужен универсальный код.

P.S. В glut-программе нету обработчика событий все спрятано внутри GLUT'а. Пользватель лишь указывает какую функцию в каких случаях запускать.

PM MAIL ICQ   Вверх
antropod
Дата 23.1.2008, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 23.5.2007

Репутация: нет
Всего: нет



Могу я как вариант кросс-платформенной библиотеки предложить SDL?
Цитата

P.S. В glut-программе нету обработчика событий все спрятано внутри GLUT'а. Пользватель лишь указывает какую функцию в каких случаях запускать.
В SDL тебе самому предстоит обрабатывать события, поэтому возможностей больше.

Вместо glutDisplayFunc обрабатываешь сообщение SDL_VIDEOEXPOSE, вместо glutReshapeFunc - SDL_VIDEORESIZE.
Вместо glutPostRedisplay
Код

void PushRedisplay
{
    SDL_Event redisplay_event;
    event.type = SDL_VIDEOEXPOSE;
    SDL_PushEvent( &redisplay_event );
}


Ну и так далее.

Самое главное - есть функция SDL_Delay(..)
Код

bool running = true;
while ( running )
{
    SDL_Event Event;
    while( SDL_PollEvent( &Event ) > 0 )
    {
         if ( Event.type == SDL_QUIT )
             running = false;
         else
             HandleEvents( &Event );
    }
    SDL_Delay(1);
}


Это сообщение отредактировал(а) antropod - 23.1.2008, 10:34
PM MAIL   Вверх
AntZ
Дата 24.1.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 17
Регистрация: 6.6.2007

Репутация: нет
Всего: нет



2 antropod.
Спасибо за совет!!! Пожалуй посмотрю что можно сделать с ее помощью... Единственное но... Преподы знают тока ОпенГЛ, точнее лишь Глют... Поэтому SDL буду использовать только для себя smile
Однако, может, я его еще не знаю... Вдруг это решение...

Вопрос еще открыт...
PM MAIL ICQ   Вверх
Rickert
Дата 28.1.2008, 08:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: 2
Всего: 52



AntZ, мой совет, не использовать glut. Я всегда его обхожу. Стандартная Xlib библиотека и прикручивай к ней OpenGL.
Не вижу необходимости в использовании glut.
Поставь на машину vmware и разверни на ней линукс, там и кодь.


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Вы можете найти полезным что...
Alexeis
Rickert
  • Английская документация по DirectX лежит где-то здесь.
  • Английская документация по OpenGL лежит где-то там.
  • Гейм-дев у нас обсуждают где-то тут

Ждём вас! С уважением, Alexeis, Rickert.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Мультимедия, OpenGL/DirectX | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.