SFML:如何解决在 sfml 中旋转精灵时精灵质量下降的问题

SFML: How to solve sprite quality drop when rotating a sprite in sfml

下面 link 上的图片包含 20 多张图片(每个 body 零件和盔甲类型在单独的文件中)。这个角色在名为 "Spriter" 的软件中被动画化。该代码采用 spriter 的输出文件 (.scml),然后计算 body 零件和装甲零件的位置和每帧的旋转。

当没有旋转时,一切都绘制得很流畅,但是当有旋转部分时,精灵画得有点扭曲,如下面的 gif 所示:

这里是the gif

这个失真问题能解决吗?

这些瑕疵似乎是由于缺乏平滑而造成的,这对像素艺术来说很好,但对矢量艺术和旋转的东西来说就不太好了。

要启用平滑,只需找到每个 body 部分的 sf::Texture(s),然后对每个部分调用 setSmooth(true)

Official documentation here

区别在于纹理的每个 on-screen 像素(或 片段 )在其映射到的纹理坐标落在纹理像素之间时将如何渲染(或 纹素)。当您执行缩放、分数平移和旋转时,很容易发生这种错位。

在启用平滑的情况下,每个片段都是通过插值几个最接近其计算纹理坐标的纹素来渲染的。如果片段的纹理坐标落在纹素之间,那么您会看到发生少量混合。

否则,在禁用平滑的情况下,每个片段仅通过选择最接近其计算的纹理坐标的单个纹素来渲染,并且不执行插值。在这种情况下,当片段的纹理坐标落在纹素之间时,只需选择一个或另一个纹素。这会导致您看到锯齿状、块状的旋转伪像。

请注意,对于 densely-packed spritesheet 之类的东西,平滑可以将相邻纹理数据 "bleeding" 影响到当前精灵中。