我正在开发iPhone应用程序,我在常规UIView上有一个openGL视图渲染。它正在工作,但我似乎无法让openGL视图具有透明背景,显示下面的UIView。相反,我得到了一个大黑盒子。
我尝试将背景颜色设置为UIColor clearColor,我将opaque设置为NO,我将glClearColor设置为0.0,0.0,0.0,0.0。
我认为我误解/误用了与混合模式相关的东西,但我不确定。任何人都可以给我一些示例代码,说明如何执行此操作吗?
提前致谢。
答案 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,无论您将其绘制到何处。