【问题标题】:Make Anaglyph Presentation with CALayers使用 CALayers 进行浮雕演示
【发布时间】:2011-08-19 13:57:32
【问题描述】:

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

【问题讨论】:

    标签: cocoa calayer 3d


    【解决方案1】:

    我用下面的代码解决了这个问题:

    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 复合滤镜是否最适合制作浮雕,但它似乎有效。

    【讨论】:

      猜你喜欢
      • 2020-11-22
      • 2016-09-22
      • 2014-01-06
      • 1970-01-01
      • 1970-01-01
      • 2012-05-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多