2010-08-18 110 views
1

我試圖得到一個深度緩衝工作,所以我就可以開始製作遊戲的iOS。我對OSX的OpenGL和Objective-C很好,但這是我第一次製作iphone應用程序。使用深度緩衝使用OpenGL ES 1.1

我除去ES1Renderer和ES2Renderer類和移動的ES1代碼到EAGLView類。當我做到這一點時,默認的動畫工作。當我嘗試使用透視時,它出錯了。我現在得到一個白色的屏幕。有人能告訴我我做錯了什麼嗎?

在初始化方法:

// Create default framebuffer object. 
    glGenFramebuffersOES(1, &defaultFramebuffer); 
    glGenRenderbuffersOES(1, &colorRenderbuffer); 
    glBindFramebufferOES(GL_FRAMEBUFFER_OES, defaultFramebuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_COLOR_ATTACHMENT0_OES, GL_RENDERBUFFER_OES, colorRenderbuffer); 
    //Initialisation code for the game's graphics and to develop the scene 
    glEnable(GL_DEPTH_TEST); //Enables Depth Testing 
    glDepthFunc(GL_LEQUAL); 
    glDepthMask(GL_TRUE); 
    //glEnable(GL_CULL_FACE); 
    //glCullFace(GL_FRONT); 
    //Setup projection matrix 
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity(); 
    double xmax = 0.04142135624 * ((float) backingWidth)/backingHeight; 
    glFrustumf(-xmax, xmax, -0.04142135624, 0.04142135624, 0.1, 2000); //The ymax and min have been precalculated 
    glMatrixMode(GL_MODELVIEW); //Select The Modelview Matrix 
    glLoadIdentity(); 

在drawView函數:

static const GLfloat squareVertices[] = { 
     1, 1,-0.1f, 
     -1, 1,-0.1f, 
     1, -1,0.1f, 
     -1, -1,0.1f, 
    }; 

    static const GLubyte squareColors[] = { 
     0,0,200,255, 
     40,90,250,255, 
     0,0,200,255, 
     50,100,230,255, 
    }; 
    glMatrixMode(GL_MODELVIEW); 
    glLoadIdentity(); 
    glClear(GL_DEPTH_BUFFER_BIT); 
    glVertexPointer(3, GL_FLOAT, 0, squareVertices); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glColorPointer(4, GL_UNSIGNED_BYTE, 0, squareColors); 
    glEnableClientState(GL_COLOR_ARRAY); 

    glDrawArrays(GL_TRIANGLE_STRIP, 0, 4); 
    [context presentRenderbuffer:GL_RENDERBUFFER_OES]; 

在layoutSubviews方法:

// Allocate color buffer backing based on the current layer size 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, colorRenderbuffer); 
    [context renderbufferStorage:GL_RENDERBUFFER_OES fromDrawable:(CAEAGLLayer*) self.layer]; 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_WIDTH_OES, &backingWidth); 
    glGetRenderbufferParameterivOES(GL_RENDERBUFFER_OES, GL_RENDERBUFFER_HEIGHT_OES, &backingHeight); 
    glGenRenderbuffersOES(1, &depthRenderbuffer); 
    glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
    glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, backingWidth, backingHeight); 
    glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 

    if (glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) != GL_FRAMEBUFFER_COMPLETE_OES) 
    { 
     NSLog(@"Failed to make complete framebuffer object %x", glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES)); 
     return NO; 
    } 

    return YES; 
    [self drawView:nil]; 

我所做的一切,看來我得做。我不知道爲什麼它對於iOS來說太複雜了。

三江源的任何幫助。

+0

也在改變着清晰的彩色不起作用。它總是白色的。 – 2010-08-19 11:45:29

+0

我需要重新綁定顏色緩衝器: glBindRenderbufferOES(GL_RENDERBUFFER_OES,colourRenderbuffer); 清晰的顏色現在可以正常工作,但是正方形的渲染不會保留。 – 2010-08-19 20:33:42

回答

0

看一看代碼,你可以找到at this page筆者inits的EAGLView子類參數化方法的情況下,他需要一個深度緩衝

+0

謝謝。我看過了,它似乎像我一樣設置深度緩衝區。我無法運行它,因爲它使用舊的SDK。我如何將SDK更改爲新的,以便我可以運行它? 謝謝你的回覆。 – 2010-08-22 21:02:48

+0

非常感謝!我最終發現,如何更改SDK。 我得到的東西來渲染後,我複製的相機代碼和glPushMatrix()位。我不確定哪些是必需的。我懷疑這是後者。在正常的OpenGL中,你應該顯示一些東西,而不需要翻譯矩陣,glPushMatrix()從不需要。 沒有告訴我這是需要的。我只是很高興有東西呈現。我想我可以從這裏弄清楚什麼。 非常感謝。 – 2010-08-22 22:16:14

+0

不要感謝我,感謝博主^^。順便說一句,用於更改所需的SDK轉到項目>編輯項目設置>體系結構>基本SDK – rano 2010-08-23 06:16:57

0

我可能會來讀這個錯,但要定義一個裁剪框:

glFrustumf(-xmax, xmax, -0.04142135624, 0.04142135624, 0.1, 2000); 

而你試圖與渲染對象:

static const GLfloat squareVertices[] = { 
     1, 1,-0.1f, 
     -1, 1,-0.1f, 
     1, -1,0.1f, 
     -1, -1,0.1f, 
    }; 

在頂部,你將Z值從0.1剪切到2000. 但是,頂點的Z值從-0.1到0.1。 這些看不到重疊。

你可能想嘗試移動要 看看進入該地區,你可以看到它的對象。

+0

我試過把它移到這個地方。我發現我忘了設置視口,所以我會再試一次... 它仍然不會工作,我的Z值爲10. 我在初始化部分就在我設置視口設置投影矩陣: glViewport(0,0,backingWidth,backingHeight); 謝謝你的回答。 – 2010-08-19 11:15:34