使用CALayers制作浮雕演示文稿

时间:2011-08-19 13:57:33

标签: cocoa calayer 3d

我正在寻找一种使用NSViewCALayers中显示浮雕图像的方法。这是可能的?如果没有,我如何从CALayers创建立体图?

1 个答案:

答案 0 :(得分:0)

我使用以下代码解决了问题:

layerLeft=[[QTCaptureLayer alloc]initWithSession:sessionLeft];
layerRight=[[QTCaptureLayer alloc]initWithSession:sessionRight];
[anaglyphView setWantsLayer:YES];
CALayer *layer = [CALayer layer];
CALayer *containerLeft = [CALayer layer];
CALayer *containerRight = [CALayer layer];
[anaglyphView setLayer:layer];

layer.backgroundColor = CGColorCreateGenericRGB(0,0,0,1);
layer.borderColor=CGColorCreateGenericRGB(1,1,1,1);
layer.borderWidth=4.0;
layer.frame = NSRectToCGRect(NSMakeRect(0, 0, 1000, 1000));

[anaglyphView.layer addSublayer:containerLeft];
[anaglyphView.layer addSublayer:containerRight];
[containerLeft addSublayer:layerLeft];
[containerRight addSublayer:layerRight];

containerLeft.frame=NSRectToCGRect(NSMakeRect(50, 50, 600, 400));
containerRight.frame=NSRectToCGRect(NSMakeRect(50, 50, 600, 400));
layerLeft.frame = NSRectToCGRect(NSMakeRect(0, 0, 600, 400));
layerRight.frame=NSRectToCGRect(NSMakeRect(0, 0, 600, 400));

rightFilter = [CIFilter filterWithName:@"CIColorMatrix"];
leftFilter = [CIFilter filterWithName:@"CIColorMatrix"];
CIFilter *compositeFilter = [CIFilter filterWithName:@"CIDifferenceBlendMode"];


CGFloat zero[4] = {0.0f, 0.0f, 0.0f, 0.0f};
CGFloat r[4] = {1, 0.0f, 0.0f, 0.0f};
CGFloat g[4] = {0.0f, 1, 0.0f, 0.0f};
CGFloat b[4] = {0.0f, 0.0f, 1, 0.0f};
CGFloat a[4] = {0.0f, 0.0f, 0.0f, 1};
[rightFilter setValue:nil forKey:@"inputImage"];  
[rightFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputRVector"];
[rightFilter setValue:[CIVector vectorWithValues:g count:4] forKey:@"inputGVector"];
[rightFilter setValue:[CIVector vectorWithValues:b count:4] forKey:@"inputBVector"];
[rightFilter setValue:[CIVector vectorWithValues:a count:4] forKey:@"inputAVector"];
[rightFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBiasVector"];

[leftFilter setValue:nil forKey:@"inputImage"];
[leftFilter setValue:[CIVector vectorWithValues:r count:4] forKey:@"inputRVector"];
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputGVector"];
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBVector"];
[leftFilter setValue:[CIVector vectorWithValues:a count:4] forKey:@"inputAVector"];
[leftFilter setValue:[CIVector vectorWithValues:zero count:4] forKey:@"inputBiasVector"];

layerRight.compositingFilter =rightFilter;
layerLeft.compositingFilter =leftFilter;
containerRight.compositingFilter=compositeFilter;

其中anaglyphView是NSView,layerLeft和layerRight是两个QTCapureLayer。 我为每个通道(左/右)创建了2个图层,一个用于颜色过滤,另一个用于复合过滤。我不知道CIDifferenceBlendMode复合滤镜是否最适合制作浮雕,但它似乎有效。

相关问题