如何在sdl2中放大窗口或渲染器以获得像素化外观



我希望在sdl2中为我的屏幕中的所有对象提供这种像素化外观

要做到这一点,必须设置nearest缩放(SDL2中的默认值(,它不使用抗锯齿。如果是,可以通过将提示SDL_HINT_RENDER_SCALE_QUALITY设置为nearest(或0(来使用SDL_SetHint。如果现在在足够大的区域中渲染一个小纹理(比纹理大小大得多(,则会在窗口中看到大像素。

另一方面,如果有大纹理(就像链接线程中一样(,或者只想将整个帧像素化渲染,可以通过在低分辨率辅助纹理(用作后缓冲区(上渲染帧的内容,然后在渲染整个帧后,在窗口中渲染后缓冲区来实现。缓冲区纹理将在整个窗口中拉伸,然后像素化将可见。

我在Fairtris游戏中使用了这种方法,该游戏以类似NES的分辨率渲染图像。内部后缓冲区纹理的分辨率为256×240像素,可以在任何大小的窗口中渲染,保持所需的比例(4:3,因此略微水平拉伸(。然而,在这个游戏中,我使用了线性缩放来使图像更平滑。


要做到这一点,您需要:

  • 请记住,必须设置CCD_ 7缩放
  • 创建具有CCD_ 8标志的渲染器
  • 创建具有低分辨率(例如256×240(和SDL_TEXTUREACCESS_TARGET标志的后缓冲区纹理

渲染帧时,需要:

  • 使用CCD_ 10将渲染器目标设置为后缓冲区纹理
  • 使用渲染器和后台缓冲区大小(例如256×240(渲染帧应该包含的所有内容
  • 再次使用CCD_ 11将渲染器目标带回窗口

如果您希望帧中的区域更小(放大效果,屏幕上的像素就更大(或区域更大(缩小效果,屏幕中的像素就更小(,您可以随时调整后缓冲区纹理的大小。要做到这一点,您很可能需要销毁并重新创建具有不同大小的后缓冲区纹理。或者,您可以创建一个带有额外边距的大后缓冲区纹理,在渲染时,使用更小或更大的区域——这将避免冗余的内存操作。

此时,可以在窗口中渲染辅助纹理中的整个帧。要在窗口中渲染它,请使用SDL_RenderCopy函数,指定渲染器句柄和后缓冲区纹理句柄(不应指定矩形,以便在整个窗口区域上完全渲染纹理(,最后指定SDL_RenderPresent

如果需要在窗口中渲染与纵横比有关的帧,请使用SDL_GetWindowSize获取当前窗口大小,并在考虑后缓冲区纹理的纵横比和窗口比例(纵向和横向(的情况下计算目标区域。但是,在窗口中渲染后台缓冲区纹理之前,请首先使用SDL_RenderClear清理窗口,以便用黑色填充窗口的其余区域(黑条(。

相关内容

  • 没有找到相关文章

最新更新