Другие языки программирования и технологии
О графическом режиме ТурбоПаскаля и о маленькой проблемме, скоторой я столкнулся...
Понимаете, в чем дело...При частой очистке экрана и прорисовке элементов создается эффект мерцания, как на старом ЭЛТ-мониторе.Вот, к примеру, мини-программа как пример.--------------------program graph1;uses crt,graph;var q,q1:integer;beginDetectGraph(q,q1);InitGraph(q,q1,'');while not keypressed dobeginClearDevice;setfillstyle(1,3);Bar(0,0,640,480);delay(3000);end;CloseGraph;End.--------------------Здесь идет простая очистка экрана, потом строится закрашенный прямоугольник и так пока не будет нажата любая клавиша.Но экран мельтешит и во всех программах, написанных мной на паскале с использованием модуля graph.В чем же дело? Почему это происходит и можно ли с этим бороться? Заранее благодарю)
Дело в том, что экран успевает перерисоваться несколько раз за то время, пока он "очищается".
Графическая подсистема Паскаля, по крайней мере, стандартная, очень медленная -- она работает в режиме 640x480, с использованием специального режима видеокарты -- битовые панели, регистры.. . Жуть, короче.
Для того чтобы этого не было, обычно используются такие техники, как трассировка обратного хода луча (то есть экранная память перезаписывается в тот момент, когда луч CRT бежит "обратно"), а также режим нескольких экранных областей -- в этом случае мы рисуем на "скрытом" экране, а показываем открытый -- а для следующего кадра меняем экраны местами, скрытый становится открытым и наоборот.
Впрочем, эти технологии были популярны во времена DOS, а сейчас они уже несколько.. . э.. . устарели.
Из более-менее современных решений -- это, например, использование API операционной системы или ее графической подсистемы для рисования (GDI / DirectDraw в Windows, XWindow в Linux/BSD/Solaris/Etc), или, если уж так хочется DOS, то использование VESA функций. Их, конечно, прийдется поискать (TPU-модули для паскаля, например, я не встречал, равно как и библиотек для BC3 -- писал обработчики сам. Это не так уж и сложно, кстати... )
Графическая подсистема Паскаля, по крайней мере, стандартная, очень медленная -- она работает в режиме 640x480, с использованием специального режима видеокарты -- битовые панели, регистры.. . Жуть, короче.
Для того чтобы этого не было, обычно используются такие техники, как трассировка обратного хода луча (то есть экранная память перезаписывается в тот момент, когда луч CRT бежит "обратно"), а также режим нескольких экранных областей -- в этом случае мы рисуем на "скрытом" экране, а показываем открытый -- а для следующего кадра меняем экраны местами, скрытый становится открытым и наоборот.
Впрочем, эти технологии были популярны во времена DOS, а сейчас они уже несколько.. . э.. . устарели.
Из более-менее современных решений -- это, например, использование API операционной системы или ее графической подсистемы для рисования (GDI / DirectDraw в Windows, XWindow в Linux/BSD/Solaris/Etc), или, если уж так хочется DOS, то использование VESA функций. Их, конечно, прийдется поискать (TPU-модули для паскаля, например, я не встречал, равно как и библиотек для BC3 -- писал обработчики сам. Это не так уж и сложно, кстати... )
погляди справку на команды GetImage и PutImage. С ними ниче мерцать не будет.
Смотри, ты чистишь экран, а потом рисуешь, как будто выключаешь - включаешь лампочку.
Если тебе не нужна предыдущая картинка, просто перерисовывай ее - выкинь ClearDevice, а SetFillStyle(1,3); поставь ПЕРЕД циклом (зачем одно и то же делать?) .
Если предыдущая картинка (или ее части) нужна, попробуй строить ВСЕ изображение "за экраном", т. е. Bar(0,0, -640, -480); и в нужный момент выводить его полностью просто заменяя -640, -480 на 640, 480
Если тебе не нужна предыдущая картинка, просто перерисовывай ее - выкинь ClearDevice, а SetFillStyle(1,3); поставь ПЕРЕД циклом (зачем одно и то же делать?) .
Если предыдущая картинка (или ее части) нужна, попробуй строить ВСЕ изображение "за экраном", т. е. Bar(0,0, -640, -480); и в нужный момент выводить его полностью просто заменяя -640, -480 на 640, 480
Юра Сандрунов
Это простенькая программа.
Вот более сложная игрушка, моя, самодельная
http://files.mail.ru/BYXGGU
Там уже все посложнее, но с мерцанием экрана та же фигня)
Вот более сложная игрушка, моя, самодельная
http://files.mail.ru/BYXGGU
Там уже все посложнее, но с мерцанием экрана та же фигня)
я обычно в паскале делаю листание видеостраниц, чтобы не так сильно мерцало
Юра Сандрунов
А как делается это листание? Я только недавно начал графику изучать просто))
Віталік Побуцький
вот тут кое че написано по этому поводу
book.kbsu.ru/practice/2_8/2_8_10.html
book.kbsu.ru/practice/2_8/2_8_10.html
Похожие вопросы
- Как задать разрешение окна в графическом режиме Turbo Pascal??? Alt-Enter не предлагать!!
- Как задать разрешение окна в графическом режиме Turbo Pascal???
- Про паскаль и турбопаскаль
- Кубик рубик турбопаскаль
- Помогите, проблемма с операцией "или" \!\!
- Помощь по турбопаскалю, SOS :З
- Помогите написать прогу в турбопаскале.
- Создать программу по турбопаскаль вывести ответ желтым цветом даны три A,B,C числа найти максимальное
- Задача в ТурбоПаскаль
- Расскажите мне пожалуйста, что вы знаете о графическом планшете?
А можно немного подробнее, как это - менять экраны?