2014-09-01 69 views
1

深入測試的主要步驟來自於我的理解: 1)支持深度測試以及我們如何進行深度測試 2)創建幀緩衝區對象並確保它具有附加深度 3)綁定我們的幀緩衝區對象(請務必在渲染前將其清除) 4)繪製東西我的管道將深度緩衝區渲染爲紋理時可能會出現什麼問題?

那應該是沒有?我們的幀緩衝深度附件應該有深度數據?但是,我總是直1的默認深度清晰的彩色

第1步:

glEnable(GL_DEPTH_TEST); 
glDepthFunc(GL_LEQUAL); 

第2步:

//create the frame buffer object 
glGenFramebuffers(1, &m_uifboHandle); 

// Initialize FBO 
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle); 

//create 2 texture handles 1 for diffuse, 1 for depth 
unsigned int m_uiTextureHandle[2]; 
glGenTextures(2, m_uiTextureHandle); 

//create the diffuse texture 
glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[0]); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_uiTextureHandle[0], 0); 

//create the depth buffer 
glBindTexture(GL_TEXTURE_2D, m_uiTextureHandle[1]); 

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); 

glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); 
glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); 

glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT, uiWidth, uiHeight, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_BYTE, 0); 
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_uiTextureHandle[1], 0); 

//go back to default binding 
glBindFramebuffer(GL_FRAMEBUFFER, 0); 

步驟3:

//bind the frame buffer object 
glBindFramebuffer(GL_FRAMEBUFFER, m_uifboHandle); 

//clear it 
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 

步驟4:

//draw things 

這些是不是步驟?
我錯過了什麼?
我試了幾個不同的教程。
我不能得到任何深度渲染到紋理 我一直得到直1的一遍又一遍。

+0

嘗試結合您的深度紋理後添加過濾參數,就像您結合您的漫反射後做質地。 – thp9 2014-09-01 21:26:19

+0

添加它。依然沒有 – 2014-09-01 21:40:31

回答

0

framebuffer可能不完整。嘗試checking for completeness。而且你的代碼是:

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGB, GL_UNSIGNED_BYTE, NULL); 

但是,它應該是(觀看RGB-RGBA):

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, uiWidth, uiHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);