在 SCNNode 上应用内置的 CIFilter 时,没有问题。 像这样:
CIFilter *bloomFilter = [CIFilter bloomFilter];
[bloomFilter setValue: @(2) forKey: kCIInputIntensityKey];
[bloomFilter setValue: @(40) forKey: kCIInputRadiusKey];
node.filters = @[bloomFilter]
但是,在 SCNNode 上应用自定义过滤器时,该节点丢失了。 像这样:
@interface CustomFilter : CIFilter
@property(nonatomic, strong) CIKernel *kernel;
@property(nonatomic, strong) CIImage *inputImage;
@end
@implementation CustomFilter
- (CIKernel *)kernel {
if (!_kernel) {
NSBundle *bundle = [NSBundle mainBundle];
NSURL *kernelURL = [bundle URLForResource:@"mirrorX" withExtension:@"cikernel"];
NSError *error;
NSString *kernelCode = [NSString stringWithContentsOfURL:kernelURL
encoding:NSUTF8StringEncoding error:&error];
if (kernelCode == nil) {
NSLog(@"Error loading kernel code string in %@\n%@",
NSStringFromSelector(_cmd),
[error localizedDescription]);
}
_kernel = [CIKernel kernelWithString:kernelCode];
}
return _kernel;
}
- (CIImage *)outputImage {
return [(CIWarpKernel *)self.kernel applyWithExtent:self.inputImage.extent
roiCallback:^CGRect(int index, CGRect destRect) {
return destRect;
}
inputImage:self.inputImage
arguments:@[@(self.inputImage.extent.size.width)]];
}
@end
kernel vec2 mirrorX ( float imageWidth )
{
vec2 currentVec = destCoord();
return vec2 ( imageWidth - currentVec.x , currentVec.y );
}
自定义过滤器代码已调试,inputImage不为nil,extent数据好像没问题。但是,inputImage 显示为全透明图片。
在节点上应用自定义过滤器后,节点丢失。
我也对 inputImage 的分配方式感到困惑。
任何帮助将不胜感激。谢谢。