2010-05-07 35 views
1

我想從文件中加載深度緩衝並將其複製到深度緩衝區,而不是清除每一幀。繪製和加載GL_DEPTH_COMPONENT紋理

反正,我是一個有點新的OpenGL的,所以我只是試圖加載我的質地是這樣的:

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, width, height, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, DepthData); 

,我試着畫出這樣的:

glBindTexture(GL_TEXTURE_2D, DepthTexture); 
glColorMask(FALSE, FALSE, FALSE, FALSE); 

glBegin(GL_QUADS); 

    glTexCoord2f(0.0f, 0.0f); glVertex2f(0.0f, 0.0f); 
    glTexCoord2f(0.0f, 1.0f); glVertex2f(0.0f, 1.0f); 
    glTexCoord2f(1.0f, 1.0f); glVertex2f(1.0f, 1.0f); 
    glTexCoord2f(1.0f, 0.0f); glVertex2f(1.0f, 0.0f); 

glEnd(); 

我試圖加載每個值設置爲1.0的深度緩衝區,並且我試圖繪製的所有內容都隱藏起來,而不應該這樣做。

我該怎麼辦? 順便說一句,我不想​​使用glDrawPixels

回答

4

您確實正在繪製一個紋理四元組不更新顏色緩衝區,並仍在更新深度緩衝區。但是,您正在編寫的值是多邊形的實際深度值,而不是紋理中的值!這就是爲什麼一切都最終被z-culled。

完成你想要的最簡單的方法是使用自定義着色器,並寫入自定義的gl_FragDepth值,從你的紋理中讀取它。

+0

問題是我不能使用着色器,當它完成時(我知道glBegin/End,但這不是一個大問題),我將移植它以打開GL ES。 – Brammie 2010-05-07 13:57:59

+1

@Brammie If你正在使用OpenGLES我不認爲你有什麼選擇,只能使用'glDrawPixels'。即使使用ES 2.0,也無法從着色器寫入深度(缺少'gl_FragDepth'輸出) – 2010-05-07 14:11:15

+0

@Andresa Brinck:是不是不支持glDrawPixels?好..我會嘗試一下。 – Brammie 2010-05-07 14:13:09