【问题标题】:iPhone: Layering a transparent openGL view on top of a UIView?iPhone:在 UIView 之上分层透明的 openGL 视图?
【发布时间】:2010-11-26 13:36:11
【问题描述】:

我正在开发 iPhone 应用程序,并且我在常规 UIView 之上有一个 openGL 视图渲染。它正在工作,但我似乎无法让 openGL 视图具有透明背景来显示下面的 UIView。相反,我得到了一个大黑匣子。

我已尝试将背景颜色设置为 UIColor clearColor,我已将 opaque 设置为 NO,我已将 glClearColor 设置为 0.0,0.0,0.0,0.0。

我认为我误解/误用了与混合模式相关的内容,但我不确定。谁能给我一些示例代码来说明如何做到这一点?

提前致谢。

【问题讨论】:

  • 你有没有得到这个工作?我有类似的问题。我在 drawableProperties 中使用 kEAGLColorFormatRGBA8。

标签: iphone opengl uiview transparency


【解决方案1】:

检查视图的颜色格式。如果您通过 drawableProperties 字典将其设置为 kEAGLColorFormatRGB565,则无论您在其中绘制什么内容,视图内容的 alpha 通道都将被隐式处理为 1.0。

【讨论】:

    【解决方案2】:

    这是我必须做的才能让它工作:

    eaglLayer.opaque = NO;      
    eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                    kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil];
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
    

    如果您正在做我正在做的事情并尝试使用 GLGravity 演示对其进行测试,则每次调用 drawView 时都会再次调用 glClearColor(0.0f, 0.0f, 0.0f, 1.0f); -- 所以请确保将其更改为 @987654324 @ 也! :)

    【讨论】:

    • 我发现 iOS 5 及更高版本不需要“drawableProperties”
    • HOWEVER ...我想指出,您必须在“viewDidLoad”或类似名称中调用“opaque = NO” - 如果您在 NIB 文件中设置它,Apple 会在运行时默默地覆盖它(邪恶!)
    【解决方案3】:

    在 EAGLView.m 中添加这些

    -(id)initWithCoder:(NSCoder*)coder
    
    self.opaque = NO;
    self.backgroundColor = [UIColor clearColor];
    
    CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
    eaglLayer.opaque = NO;
    
    CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
    const CGFloat myColor[] = {0.0, 0.0, 0.0, 0.0};
    eaglLayer.backgroundColor = CGColorCreate(rgb, myColor);
    CGColorSpaceRelease(rgb);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-17
      • 2010-11-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-01
      • 2013-03-13
      相关资源
      最近更新 更多