如果要在 OpenGL 下绘制图像,则不能将 a 添加UIImageView
为子视图,它将绘制在您的渲染之上。将其绘制为矩形上的纹理将起作用(我实际上在应用程序中使用它),但您必须调整图像大小。将 OpenGL 视图置于UIImageView
下方也可以,但您必须先调整一些参数:
确保kEAGLDrawablePropertyColorFormat
是kEAGLColorFormatRGBA8
. 这必须CAEAGLLayer
通过设置属性在您的 , 中设置drawableProperties
:
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES],
kEAGLDrawablePropertyRetainedBacking,
kEAGLColorFormatRGBA8,
kEAGLDrawablePropertyColorFormat,
nil];
我认为正确的地方是你的- (void)setupLayer
方法。
- 确保您的
CAEAGLLayer.opaque
属性设置为NO
(再次在 中setupLayer
)。
当你清除缓冲区时,用 0% 的 alpha 颜色清除它,这样 GLView 后面的内容是可见的:
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
- 如果您计划使用多重采样或绘制 alpha<1 的对象,请考虑启用 alpha 混合。
无论如何,根据我的经验,保持 GLView 不透明并使用纹理绘制背景要快得多。iPhone 5 用户可能不会注意到,但在旧款 iPhone 3G 上,每秒帧数显着增加。