2012-07-10 51 views
1

我已經成立了一個OpenGL ES 2.0查看下面這款iPhone - 教程:添加的UIImageView作爲子視圖的OpenGL ES 2.0的瀏覽

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

現在我想要畫上的圖像的頂部。我已經嘗試以下,但沒有做的工作:

  • 添加一個的UIImageView作爲的OpenGL視圖,
  • 添加的UIImageView作爲ViewController中一個子視圖OpenGL的視圖
  • 之下繪畫圖像子視圖與OpenGL在相同的上下文中也不起作用,主要是因爲紋理大小不是2的冪...

兩次只有OpenGL視圖是可見的。

+0

把圖像視圖放在OpenGL視圖頂部 – 2012-07-10 17:44:42

+0

從我知道你不能在openGL視圖或其下面有一個UIKit元素(openGL視圖不透明),你必須在頂部繪製它。 – KDaker 2012-07-10 18:03:49

+0

@KDaker - 不,你確實可以將UIView作爲顯示OpenGL ES內容的UIView的子視圖。我一直這樣做。在這種情況下還有其他一些問題,因爲這應該工作得很好。 – 2012-07-10 22:01:50

回答

0

如果你想繪製OpenGL下面的圖像,你不能添加一個UIImageView作爲子視圖,它會繪製在你的渲染之上。 將其繪製爲矩形上的紋理將起作用(我實際上在應用程序中使用它),但您必須調整圖像大小。 配售UIImageView你的OpenGL視圖下面也將工作,但你必須先調整幾個參數:

  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.

在我的經驗,無論如何,保持GLView不透明和繪製與紋理背景顯着更快。 iPhone 5的用戶可能不會注意到,但在舊iPhone 3G上,每秒幀數顯着增加。