如何通过透明度实现可以将纹理切割为多个精灵的算法?

时间:2014-07-16 14:56:26

标签: graphics unity3d 2d sprite

我想实现Unity拥有的功能:http://docs.unity3d.com/Manual/SpriteEditor.html
“将切片类型设置为自动,编辑器将尝试通过透明度猜测精灵元素的边界”,实现此内容的最简单方法是什么?

1 个答案:

答案 0 :(得分:4)

你必须找到精灵的边界框。为此,您必须将像素标记为已使用且尚未使用。

在伪代码中:

set every transparent pixel as used
// now you should have separate sprites marked as unused

while at least one pixel not used:

  position=find first unused pixel

  bounds=flood fill from position as used, saving bounds of the fill

  if bounds intersect any previous found sprite position:
    throw error

  save bounds as a sprite position

示例(sprite source):

首先你有一张透明背景的精灵表:

example-step-1

然后填写背景:

example-step-2

然后找到第一个未使用的像素:

example-step-3

然后洪水填充精灵,你的洪水填充的边界是你的精灵的界限。

example-step-4


您可能想要修改第一步,以便为精灵提供边距 - 这样分离效果会更好,并且您不会留下任何悬空像素。

example-separation