Я сделал небольшую программу, которая отображает 3d-куб, который можно масштабировать по любой оси с помощью клавиш со стрелками. Единственная проблема в том, что я использую cleardevice();
для обновления куба (чтобы не было «размазывания» при масштабировании куба). это прекрасно работает, просто каждый раз, когда куб обновляется с помощью этого метода, экран на долю секунды становится черным, что приводит к раздражающему мерцанию. Есть ли лучший способ обновления экрана каждый раз, когда пользователь меняет куб?
Я действительно исследовал это, но я не смог найти что-то подходящее (может, я просто плохо разбираюсь в исследованиях, но я не смог найти что-нибудь для себя)
Есть 2 способа справиться с этим:
Двойная буферизация
я не использую BGI поэтому я придерживаюсь их документов. для WinBGIm вы можете использовать
По старому стилю BGI использовать этот:
int oldv = getvisualpage( );
int olda = getactivepage( );
setvisualpage(olda);
setactivepage(oldv);
использовать вертикальную синхронизацию с монитором
Вам нужно ждать VSync перед звонком cleardevice();
, На DOS ты можешь использовать VGA BIOS или прямой VGA / VESA доступ для получения сигнала. На высшем Операционные системы вам нужно использовать какой-то GFX API или водитель API получить VSync.
В обоих случаях обратитесь к документации для целевой платформы.
Других решений пока нет …