【发布时间】:2012-06-15 02:39:54
【问题描述】:
我正在使用 SDL 和 C++ 编写一个 2D 平台游戏。但是,我遇到了一个涉及缩放到分辨率的巨大问题。我希望游戏在全高清下看起来不错,因此游戏的所有图像都已创建,因此游戏的自然分辨率为 1920x1080。但是,如果有人使用较小的分辨率,我希望游戏可以缩小到正确的分辨率,或者如果有人使用较大的分辨率,我希望游戏可以放大。
问题是我一直无法找到有效的方法来执行此操作。我首先使用 SDL_gfx 库来预缩放所有图像,但这不起作用,因为它会产生很多偏离 -一个错误,其中一个像素丢失。而且由于我的动画包含在一个图像中,因此当动画播放时,动画会在每一帧中略微向上或向下移动。
然后在环顾四周后,我尝试使用 opengl 来处理缩放。目前,我的程序将所有图像绘制到 1920x1080 的 SDL_Surface。然后,它将这个表面转换为一个 opengl 纹理,将此纹理缩放到屏幕分辨率,然后绘制纹理。这在视觉上效果很好,但问题是它根本没有效率。目前我的最大 fps 为 18 :(
所以我的问题是,有人知道将 SDL 显示缩放到屏幕分辨率的有效方法吗?
【问题讨论】:
-
您在使用 opengl 时是否在动态绘制、转换和缩放??
-
也可以问问gamedev论坛的人,他们应该可以帮助你的。
-
是的,这就是为什么它如此低效的原因。但目前我找不到任何其他可行的方法。好的会做的。
-
为什么每次绘制都要缩放。只需缩放内存中加载的纹理存储,然后从内存中删除大纹理。用户在运行游戏时不太可能改变他们运行的规模。这会增加加载时间,但它比每次渲染都动态执行要高效得多。您应该能够使用当前在飞行时使用的相同方法来缩小纹理。
-
因为我每次缩放的纹理实际上是游戏的展示。所以我必须在每一帧都转换它,因为它每次都有新的表面绘制。如果有办法将 sdl 表面绘制到 opengl 纹理,那么我只需要加载和缩放纹理一次。