Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.09.2009, 21:56   #1
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию Мелькание экрана в OpenGL

Здраствуйте. Простите пожалуста. У меня такая проблемка: я создал програмку на OpenGL, а она при обновлении окна мелькает и некоректно выводит изображение на монитор. Если после предедущей перерисовки экрана полностю очищать буфер цвета командой "glClear clrColorBufferBit", а потом перерисовать весь рисунок - мельканий не будет. Проблема состоит в том, что мне нужна часть рисунка с предедущего кадра + новые дорисовки. Такой метод вызывает мелькание на некоторых компютерах.

Кто нибудь сталкивался с такой ситуацией? Что делать?
Multitabs вне форума Ответить с цитированием
Старый 29.09.2009, 22:11   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

я бы перерисовывал полностью тогда...

а вообще буферизацию пробывали?(ведь ГЛ это может)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 29.09.2009, 22:14   #3
russian-stalker
Участник клубаДжуниор
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

Ну дык создавайте копию предыдущего кадра и перерисовывайте его.(сразу не выводите, а перерисовывайте в памяти). А потом просто отчищайте экран и выводите получившийся кадр.
pushl $0x18E3DF6B
call ICQ
russian-stalker вне форума Ответить с цитированием
Старый 29.09.2009, 22:27   #4
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию

Сюжет проги такой: есть экран радара с 1 000 000 елементов. Эти все елементы полностю прорисовываются за 3 сек. Но если прорисовывать экран по частям, оставляя старые элементы нестертыми - пользователь может работать в реальном времени обрабатовая данные, со скоростю их поступления

Использую так называемую двойную буферизацию.

Источник проблем обнаружил в мелькании при перерисовке части экрана без стерания старой части картинки
Multitabs вне форума Ответить с цитированием
Старый 29.09.2009, 22:32   #5
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию

Эксперементировал прогу на нескольких компах:
на двух XP прога идет отлично
на вистах появляются мелькания и некоректное отображение
один XP с таким-же эфектом, как и виста
ноут с вистой и XP (это один и тот-же ноут) на висте глючит, а на XP показует нормально
Multitabs вне форума Ответить с цитированием
Старый 29.09.2009, 22:39   #6
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию

И еще одна инф.
Прога для теста взята с сайта
http://nehe.gamedev.net/data/lessons....asp?lesson=04

А ее описание с сайта
http://pmg.org.ru/nehe/nehe04.htm

Если убрать в процедуре DrawGLScene() строку glClear clrColorBufferBit - должна оставатся старая картинка + на нее рисуется новая. Но перед выводом на экран происходит мелькание
Multitabs вне форума Ответить с цитированием
Старый 01.10.2009, 15:42   #7
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Сообщение от Multitabs Посмотреть сообщение
Сюжет проги такой: есть экран радара с 1 000 000 елементов. Эти все елементы полностю прорисовываются за 3 сек. Но если прорисовывать экран по частям, оставляя старые элементы нестертыми - пользователь может работать в реальном времени обрабатовая данные, со скоростю их поступления

Использую так называемую двойную буферизацию.

Источник проблем обнаружил в мелькании при перерисовке части экрана без стерания старой части картинки
- двойная буферизация эт праввильно
- еще можно использовать быстрый вывод однажды созданного объекта-
задайте const // ID- объектов для быстрого вывода glCallList(ID)
Place =1;

при создании
Цитата:
glNewList(Place, GL_Compile);
...
ваш объект
...
glendlist
а в оnPaint потом вызывайте glCallList(Place)

p.s.: вы случаем не в области радиолокации працюэте, а то как раз занимаюсь тем же
...у меня два массива, один array [0..499,0..1499] of Tval, второй динамический и обнаружения от одних накладываю на 3D проекцию своих данных - все за полсек / проц Athlon 1GGz RAM128 Video GeForce4 mx440-64MB ("жлобство" на предприятии)
Вложения
Тип файла: zip скрин.zip (598.0 Кб, 23 просмотров)
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation

Последний раз редактировалось raxp; 01.10.2009 в 15:52. Причина: пример вывода - вложение
raxp вне форума Ответить с цитированием
Старый 02.10.2009, 00:58   #8
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию

Цитата:
- двойная буферизация эт праввильно
- еще можно использовать быстрый вывод однажды созданного объекта-
задайте const // ID- объектов для быстрого вывода glCallList(ID)
Place =1;
Вобщем, я нашел источник проблем. Парадокс, но именно двойная буферизация стала этим источником. Я заметил, что при вызове команды SwapBuffers (обновление экрана) каждое второе обновление - некоректное. Вобщем, буду еще думать над этим.

На счет команды CallList - еще ее не испытовал, но когда-то я мозговал над проблемой, которая решается с помощю этой команды.

Цитата:
...у меня два массива, один array [0..499,0..1499] of Tval, второй динамический и обнаружения от одних накладываю на 3D проекцию своих данных - все за полсек / проц Athlon 1GGz RAM128 Video GeForce4 mx440-64MB ("жлобство" на предприятии)
в моей проге кроме вывода на экран еще куча расчетов паралельно проводится

Цитата:
p.s.: вы случаем не в области радиолокации працюэте, а то как раз занимаюсь тем же
я студент - стужу радиотехнику. На счет радиолокации ты абсолютно прав - это типо моя научная робота. Видел фотки твоей проги - графа офигенная, не поспориш. У меня конечно поскромнее - в 2D.

Новая папка.rar

Я тоже люблю помучатся над оформлением своих прог! И судя по слову "працюэте" мы еще и земляки
Multitabs вне форума Ответить с цитированием
Старый 02.10.2009, 01:36   #9
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

Цитата:
Вобщем, я нашел источник проблем. Парадокс, но именно двойная буферизация стала этим источником. Я заметил, что при вызове команды SwapBuffers (обновление экрана) каждое второе обновление - некоректное. Вобщем, буду еще думать над этим
- тут применять ее надо не к выводимым объектам, а к родителю где это все прорисовывается, можно вообще к application

Цитата:
На счет команды CallList
- opengl выделяет заранее буфер и быстрее просчитывает

Цитата:
На счет радиолокации ты абсолютно прав - это типо моя научная робота. Видел фотки твоей проги - графа офигенная, не поспориш. У меня конечно поскромнее - в 2D
- подрастает молодая смена :-)
- но в локацию лучше не идтить, платят мало в этой области :-(

Цитата:
в моей проге кроме вывода на экран еще куча расчетов паралельно проводится
- парсю аналогично :-)

Цитата:
Вложение 15963
- глянул. отлично... единственно 0гр осей должен быть вверху, так заведено у военных, они отсчитывают так
... самому непривычно было, ведь математически и геометрически привыкли все ноль с горизонтали
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 03.10.2009, 20:18   #10
Multitabs
 
Регистрация: 29.09.2009
Сообщений: 6
По умолчанию

Вобщем, я долго думал над тем, как переделать прогу под команду CallList. Но наконец-то все работает и моя прога опять стала кросс-платформенной и перестала зависить от компа, на котором установленна. И хотя с двойной буферизацией было-бы все по проще запрограмировать, но зато этот метод позволяет избавится от очищения экрана при изменении его размеров и его мелькания при роботе программы!!!
Что и требовалось добится

Последний раз редактировалось Multitabs; 03.10.2009 в 20:22.
Multitabs вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разрешение экрана Копоть Артём Помощь студентам 15 04.08.2009 18:12
Чтение с экрана. Пaвeл Помощь студентам 2 05.05.2009 19:29
Мелькание курсора при скриншотах Роман Радер Общие вопросы Delphi 11 30.04.2009 03:27
Разрешение экрана Sweta HTML и CSS 4 06.09.2008 10:05
Скриншот экрана Terran Общие вопросы Delphi 2 16.12.2007 15:13