2010-03-26 48 views
2

我記得當我開始在OS X中使用OpenGL時遇到了這個問題。最終我解決了它,但我認爲那只是使用glut和C++代替Objective-C ...在iPhone上啓用OpenGL ES深度測試的問題。哪些步驟是必要的?

代碼行I在initES1Renderer如下:

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

然後在render方法,我有這樣的:

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

我認爲我缺少具體到eith東西呃iPhone或ES。需要其他什麼步驟來啓用深度測試?

感謝

+0

深度緩衝區? – Bahbar 2010-03-26 09:14:00

回答

0

您需要分配深度緩衝區本身。使用內部格式DEPTH_COMPONENT16或DEPTH_COMPONENT24分配新的渲染緩衝區,並將其附加到幀緩衝區對象。

+0

你的意思是這樣的嗎? glGenRenderbuffersOES(DEPTH_COMPONENT24,&depthRenderbuffer); glBindRenderbufferOES(GL_DEPTHBUFFER_OES,depthRenderbuffer); 我試圖做到這一點,其他gen和bind調用是這樣做的,但是似乎沒有定義DEPTH_COMPONENT24(或16)和GL_DEPTHBUFFER_OES。你如何分配和附加它? – 2010-03-26 20:32:52

+0

這將是GL_ DEPTH_COMPONENT24 – mrplants 2015-05-07 02:14:40

0

#define USE_DEPTH_BUFFER 1如果你使用OpenGL ES的項目模板。這在EAGLView.m中設置了一個深度緩衝區。

+0

我認爲這隻適用於舊的設置。使用新的默認項目,USE_DEPTH_BUFFER不會在任何地方使用。 – 2010-03-26 20:34:51

4

說明書是here,如果其他人有這個問題。代碼如下:

glGenRenderbuffersOES(1, &depthRenderbuffer); 
glBindRenderbufferOES(GL_RENDERBUFFER_OES, depthRenderbuffer); 
glRenderbufferStorageOES(GL_RENDERBUFFER_OES, GL_DEPTH_COMPONENT16_OES, 320, 480); 
glFramebufferRenderbufferOES(GL_FRAMEBUFFER_OES, GL_DEPTH_ATTACHMENT_OES, GL_RENDERBUFFER_OES, depthRenderbuffer); 

GLenum status = glCheckFramebufferStatusOES(GL_FRAMEBUFFER_OES) ; 
if(status != GL_FRAMEBUFFER_COMPLETE_OES) { 
    NSLog(@"failed to make complete framebuffer object %x", status); 
} 
+0

你將浮動傳遞給glRenderbufferStorage的任何原因? – Bahbar 2010-03-31 20:11:31

+0

很可能是因爲我不知道它是幹什麼的,並沒有看過它的文檔。 = P 感謝您指出。 – 2010-04-03 07:00:13

相關問題