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

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

本文关键字:精灵 SFML 解决 旋转 何解决      更新时间:2023-10-16

下面链接上的图像由20多个图像组成(每个身体部位和装甲型在单独的文件中(。此字符在称为" Spriter"的软件中为动画。该代码获取Spriter的输出文件(.scml(,然后计算每个帧的身体部位和装甲零件的位置和旋转。

当没有旋转时,一切都会顺利地绘制,但是当旋转零件时,精灵会被绘制一些扭曲,如下面的GIF:

这是gif

可以解决此失真问题吗?

这些文物似乎是由于缺乏平滑性,这对于像素艺术非常有用,但对于向量艺术和旋转的事物来说不是很好。

要启用平滑,只需找到每个身体部位的sf::Texture(s(,然后在每个身体上调用setSmooth(true)

这里的官方文件

区别在于,当纹理协调其映射到纹理像素(或 dexels 。当您执行缩放,分数翻译和旋转时,这种错位很容易发生。

平滑打开后,每个片段都是通过插值的几个接近其计算出的纹理坐标的插值来渲染的。如果片段的纹理坐在纹理之间,则会看到少量的混合发生。

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

请注意,对于诸如密集包装的spriteSheets之类的东西,平滑可以将相邻纹理数据"出血"带入当前精灵。