Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/44.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 将UIImageView作为子视图添加到OpenGL ES 2.0视图_Iphone_Ios_Opengl Es - Fatal编程技术网

Iphone 将UIImageView作为子视图添加到OpenGL ES 2.0视图

Iphone 将UIImageView作为子视图添加到OpenGL ES 2.0视图,iphone,ios,opengl-es,Iphone,Ios,Opengl Es,在本iPhone教程之后,我设置了OpenGL ES 2.0视图: 现在我试着在一张图片上画画。我已经尝试了以下方法,但没有任何效果: 添加UIImageView作为OpenGL视图的子视图 将UIImageView作为子视图添加到OpenGL视图下的ViewController中 在同一上下文中使用OpenGL绘制图像也不起作用,主要是因为纹理大小不是2的幂 两次都只有OpenGL视图可见。如果要在OpenGL下方绘制图像,则不能将UIImageView添加为子视图,它将绘制在渲染的顶部

在本iPhone教程之后,我设置了OpenGL ES 2.0视图:

现在我试着在一张图片上画画。我已经尝试了以下方法,但没有任何效果:

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

两次都只有OpenGL视图可见。

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

  • 确保
    kEAGLDrawablePropertyColorFormat
    kEAGLColorFormatRGBA8
    。必须通过设置属性
    drawableProperties
    ,在
    CaeAglayer
    中设置该属性:

    CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer;
    eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithBool:YES],
                                    kEAGLDrawablePropertyRetainedBacking,
                                    kEAGLColorFormatRGBA8,
                                    kEAGLDrawablePropertyColorFormat,
                                    nil];
    
    我认为正确的位置是您的
    -(void)setupLayer
    方法

  • 确保您的
    caeaglayer.opaque
    属性设置为
    NO
    (再次在
    setupLayer
    中)
  • 清除缓冲区时,请使用0%alpha颜色进行清除,以使GLView后面的内容可见:

    glClearColor(0.f, 0.f, 0.f, 0.f);
    glClear(GL_COLOR_BUFFER_BIT);
    

  • 如果您计划使用multisample或使用alpha绘制对象,请考虑启用alpha混合。将图像视图放在OpenGL视图的顶部,我知道您不能在OpenGL视图的内部或下方使用UIKit元素(OpenGL视图无论如何都不是透明的),您必须在顶部绘制。@KDaker-否,您确实可以将UIView作为显示OpenGL ES内容的UIView的子视图。我总是这样做。在这种情况下,肯定还有其他问题,因为这应该可以正常工作。我还尝试将UIImageView作为显示OpenGL ES内容的UIView的子视图。但无法利用这一观点。有办法解决这个问题吗?