如何将CIPixellate核心图像过滤器添加到雪碧套件场景中?
我有一个SpriteKit场景,它是一个SKScene或它的子类。我想添加一个核心图像过滤器到现场。特别是一个CIPixellate过滤器,所以我可以有8位游戏天堂免费。
我该怎么做?
发布于 2014-07-09 17:04:13
事实证明,这并不难。这只是因为核心图像过滤器文档陈旧而粗糙,在SpriteKit的情况下,文档是完全误导或不完整的,包括SKEffectNode文档。在SKEffectNode的filter属性上,SKEffectNode文档有这样的说法(截至本文)。
核心图像滤波器必须具有单个inputImage参数并生成单个outputImage参数。默认值为零。如果值为零,并且启用了效果节点,则不进行筛选。但是,它的子级仍然在单独的pass中呈现,并混合到父缓冲区中。
嗯,这是一种信息,但并不是非常有用,因为核心图像过滤器目录说CIPixellate有以下参数键:inputImage inputCenter inputScale --它没有提到outputImage,也没有提到inputScale是“如何像素化”的。
好吧那就是..。让我们看看如何。
首先,请注意,SKEffectNode.继承了SKScene这意味着您可以将CIFilters添加到其中。太棒了。
你只需要做这个。
首先创建一个CIFilter。
CIFilter *pixellateFilter;
pixellateFilter = [CIFilter filterWithName:@"CIPixellate"];
[pixellateFilter setDefaults]; // Remember to setDefaults...
// We could change some value but for this one we won't.
// [pixellateFilter setValue:@(10.0) forKey:@"inputScale"];然后将您的SKEffectNode配置为实际呈现效果!
[aScene setShouldEnableEffects:YES];把滤光片调到中间不是个坏主意。但你的里程可能不一样。
[aScene setShouldCenterFilter:YES];接下来,添加过滤器。
[aScene setFilter:pixellateFilter];请注意,您可以在将其添加到父节点之前或之后以及在它出现在屏幕上之前或之后添加此选项。您甚至可以构建自定义SKActions来完成此操作..。:)
从所有这一切中,您可以注意到,目录虽然历史悠久,但它确实告诉您,各种过滤器都是各种CICategory类型的成员,尽管这些过滤器也没有得到很好的文档说明。但是,您基本上可以假设,在给定类别中工作的任何内容都意味着该类别中的其他筛选器也可能工作:)
https://stackoverflow.com/questions/24659725
复制相似问题