1

我已经在这个 iPhone 之后设置了一个 OpenGL ES 2.0 视图 - 教程:

http://www.raywenderlich.com/3664/opengl-es-2-0-for-iphone-tutorial

现在我正在尝试在图像上绘画。我已经尝试了以下方法,但没有任何效果:

  • 添加 UIImageView 作为 OpenGL 视图的子视图
  • 在 OpenGL 视图下的 ViewController 中添加 UIImageView 作为子视图
  • 在相同的上下文中使用 OpenGL 绘制图像也不起作用,主要是因为纹理大小不是 2 的幂...

两次都只有 OpenGL 视图可见。

4

1 回答 1

0

如果要在 OpenGL 下绘制图像,则不能将 a 添加UIImageView为子视图,它将绘制在您的渲染之上。将其绘制为矩形上的纹理将起作用(我实际上在应用程序中使用它),但您必须调整图像大小。将 OpenGL 视图置于UIImageView下方也可以,但您必须先调整一些参数:

  1. 确保kEAGLDrawablePropertyColorFormatkEAGLColorFormatRGBA8. 这必须CAEAGLLayer通过设置属性在您的 , 中设置drawableProperties

    CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
    eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithBool:YES],
                                    kEAGLDrawablePropertyRetainedBacking,
                                    kEAGLColorFormatRGBA8,
                                    kEAGLDrawablePropertyColorFormat,
                                    nil];
    

    我认为正确的地方是你的- (void)setupLayer方法。

  2. 确保您的CAEAGLLayer.opaque属性设置为NO(再次在 中setupLayer)。
  3. 当你清除缓冲区时,用 0% 的 alpha 颜色清除它,这样 GLView 后面的内容是可见的:

    glClearColor(0.f, 0.f, 0.f, 0.f);
    glClear(GL_COLOR_BUFFER_BIT);
    
  4. 如果您计划使用多重采样或绘制 alpha<1 的对象,请考虑启用 alpha 混合。

无论如何,根据我的经验,保持 GLView 不透明并使用纹理绘制背景要快得多。iPhone 5 用户可能不会注意到,但在旧款 iPhone 3G 上,每秒帧数显着增加。

于 2013-03-13T10:50:36.170 回答