EAGLView 具有透明背景?

Posted

技术标签:

【中文标题】EAGLView 具有透明背景?【英文标题】:EAGLView with transparent background? 【发布时间】:2013-11-27 10:40:20 【问题描述】:

如何让cocos3D场景透明(EAGLView有透明背景)?我知道这将是一个重复的问题。 但我已经尝试了各种来源的所有建议,但没有一个对我有用

只是在这里列出它们作为参考:

1) 更改 CCDirector.m 中 setGLDefaultValues 方法中的不透明和透明颜色

 openGLView_.opaque = NO;
 glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

2) 在 EAGLView 中的 initWithCoder

CAEAGLLayer *eaglLayer = (CAEAGLLayer*)[self layer];

    pixelformat_ = kEAGLColorFormatRGBA8;
    depthFormat_ = 0; // GL_DEPTH_COMPONENT24_OES;
    multiSampling_= NO;
    requestedSamples_ = 0;
    size_ = [eaglLayer bounds].size;

    eaglLayer.opaque = NO;
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
    const CGFloat myColor[] = 0.0, 0.0, 0.0, 0.0;
    eaglLayer.backgroundColor = CGColorCreate(rgb, myColor);
    CGColorSpaceRelease(rgb);

    eaglLayer.drawableProperties = eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithBool:NO], kEAGLDrawablePropertyRetainedBacking, kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];

    if( ! [self setupSurfaceWithSharegroup:nil] ) 
        [self release];
        return nil;
    

3) 更改了我的 CCViewController 的 isOverlayingDeviceCamera 方法

viewController.isOverlayingDeviceCamera = YES;

我正在使用 EAGLView.h 版本 1.3 我尝试使用较新的版本(1.7),但我无法继续,因为它在此导入时会出现编译器错误

#import <OpenGL/OpenGL.h>

请帮帮我,因为我浪费了一整天的时间来玩这个

【问题讨论】:

【参考方案1】:

我相信您将 OpenGL 清除颜色误认为 UIView 清除颜色:

代替

glClearColor(0.0f, 0.0f, 0.0f, 0.0f);

使用

openGLView_.backgroundColor = [UIColor clearColor];

【讨论】:

我确实在 setGLDefaultValues 中尝试过。但不起作用。我应该使用更新版本的 EAGLView 类而不是 1.3 版吗? 更新:我试过 openGLView_.backgroundColor = [UIColor redColor];然后它显示一个红色背景,然后又突然变成黑色【参考方案2】:

cocos3d 2.0 中,查看 hello, world 项目模板或 CC3DemoMashUp 演示应用程序中的 AppDelegate 类。

如果您取消注释该行:

_viewController.isOverlayingDeviceCamera = YES;

它会做你想做的。

请务必遵循AppDelegates 中的模式来创建导演、控制器和视图。特别是对于 cocos3d,您应该使用CC3UIViewController(或类似CC3DeviceCameraOverlayUIViewController 的子类来显示相机),并让它配置和创建CC3GLView。远离EAGLView

如果你使用的是 2.0 之前的 cocos3d 版本,同样,它是相似的,看看在示例 cocos3d 中控制器和视图是如何处理的AppDelegates.

【讨论】:

以上两个cmet与原问题回答无关。以后,请发布一个新问题。 这似乎是坏掉的比尔。我在 CC3DemoMashUpAppDelegate.m 中取消了 _viewController.isOverlayingDeviceCamera = YES 的注释,在 CC3DemoMashUpScene.m 中取消了 [self addBackdrop] 的注释,但我没有看到我的相机取代了蓝天。 我刚刚验证了它在 Cocos3D 2.0.2 演示项目中工作。使用新版本的 Cocos2D,您还需要将 2D CCScene 的背景颜色设置为透明。请按照示例项目中的说明进行操作。如果您使用 Storyboard,请确保遵循 CC3DemoMultiScene 演示应用程序中的 MainViewController openScene: 方法中的说明,该说明说明了如何在 Storyboard 文件中配置 UIViews

以上是关于EAGLView 具有透明背景?的主要内容,如果未能解决你的问题,请参考以下文章

具有透明背景和不透明前景的 iOS 模态 ViewController

具有透明背景的 UITableView 具有纯黑色边框

java TrayIcon使用具有透明背景的图像

具有透明背景的颤动角半径

具有透明背景的 UIModalPresentationFormSheet?

检测具有透明背景的 UIImage 的裁剪矩形