iPhone:在UIView上面分层透明的openGL视图?

时间:2009-09-08 16:28:06

标签: iphone opengl uiview transparency

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

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

我认为我误解/误用了与混合模式相关的东西,但我不确定。任何人都可以给我一些示例代码,说明如何执行此操作吗?

提前致谢。

3 个答案:

答案 0 :(得分:11)

以下是我必须做的才能让它发挥作用:

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

如果你正在做我正在做的事情并且正在尝试使用GLGravity演示进行测试,每次调用glClearColor(0.0f, 0.0f, 0.0f, 1.0f);时都会再次调用drawView - 所以请确保你改变了一到glClearColor(0.0f, 0.0f, 0.0f, 0.0f);! :)

答案 1 :(得分:4)

在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);

答案 2 :(得分:2)

检查视图的颜色格式。如果您通过kEAGLColorFormatRGB565字典将其设置为drawableProperties,则视图内容的Alpha通道将被隐式视为1.0,无论您将其绘制到何处。