Graphics.h刷新屏幕
Graphics.h refresh screen
我制作了一个显示 3d 立方体的小程序,您可以使用箭头键在任何轴上对其进行缩放。唯一的问题是我使用 cleardevice();
来刷新多维数据集(因此在缩放多维数据集时没有 "smearing")。效果很好,只是每次使用这种方法刷新立方体时,屏幕都会瞬间变黑,导致烦人的闪烁。每次用户更改立方体时,是否有更好的刷新屏幕的方法?
我确实研究过这个,但我找不到合适的东西(也许我只是不擅长研究,但我找不到适合我的东西)
有两种方法可以解决这个问题:
双缓冲
我不使用 BGI 所以我坚持使用他们的文档。对于 WinBGIm,您可以使用
在旧式 BGI 上使用:
int oldv = getvisualpage( );
int olda = getactivepage( );
setvisualpage(olda);
setactivepage(oldv);
使用显示器垂直同步
在调用 cleardevice();
之前,您需要等待 VSync。在 DOS 你可以使用 VGA BIOS 或者直接 VGA/VESA 访问获取信号。在更高 OS 上,您需要使用某种 gfx API 或驱动程序 API 得到 VSync.
在这两种情况下,请参阅目标平台的文档。
我制作了一个显示 3d 立方体的小程序,您可以使用箭头键在任何轴上对其进行缩放。唯一的问题是我使用 cleardevice();
来刷新多维数据集(因此在缩放多维数据集时没有 "smearing")。效果很好,只是每次使用这种方法刷新立方体时,屏幕都会瞬间变黑,导致烦人的闪烁。每次用户更改立方体时,是否有更好的刷新屏幕的方法?
我确实研究过这个,但我找不到合适的东西(也许我只是不擅长研究,但我找不到适合我的东西)
有两种方法可以解决这个问题:
双缓冲
我不使用 BGI 所以我坚持使用他们的文档。对于 WinBGIm,您可以使用
在旧式 BGI 上使用:
int oldv = getvisualpage( ); int olda = getactivepage( ); setvisualpage(olda); setactivepage(oldv);
使用显示器垂直同步
在调用
cleardevice();
之前,您需要等待 VSync。在 DOS 你可以使用 VGA BIOS 或者直接 VGA/VESA 访问获取信号。在更高 OS 上,您需要使用某种 gfx API 或驱动程序 API 得到 VSync.在这两种情况下,请参阅目标平台的文档。