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

时间:2019-05-15 20:34:13

标签: c++ rotation sprite sfml

下面的链接上的图像由20多个图像组成(每个身体部位和装甲类型在单独的文件中)。该角色在名为“ Spriter”的软件中具有动画效果。该代码获取spriter的输出文件(.scml),然后每帧计算身体部位和装甲部位的位置和旋转。

当没有旋转时,所有东西都平滑绘制,但是当有旋转部件时,精灵的绘制会有些扭曲,如下图gif所示:

这里是the gif

可以解决这个失真问题吗?

1 个答案:

答案 0 :(得分:0)

这些伪像似乎是由于缺乏平滑性而产生的,这对像素艺术来说是很好的,但对矢量艺术和旋转的东西却不是那么好。

要启用平滑,只需为每个身体部位找到sf::Texture,然后对每个身体部位分别调用setSmooth(true)

Official documentation here

区别在于,当纹理坐标映射到纹理像素(或 texels

)之间时,纹理的每个屏幕像素(或 fragment )将如何呈现。 em>)。当您执行缩放,分数平移和旋转时,这种不对齐很容易发生。

启用平滑后,通过对最接近其计算纹理坐标的几个纹理像素进行插值来渲染每个片段。如果片段的纹理坐标位于纹理像素之间,那么您会看到少量的混合。

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

请注意,对于密集堆积的Spritesheets而言,平滑可能会导致相邻纹理数据“渗出”到当前Sprite中。

相关问题
最新问题