2011-08-22 39 views
0

我從glCopyTexImage2D()中弄錯了紋理值。我將深度紋理附加到FBO,並在渲染過程中獲得了它的值。我期望的結果如下圖所示:(X:背景,Y:正確的像素)glCopyTexImage2D()中錯誤的紋理值

---yyyyyyyyyyyyyyyyyyyy----- 
-----------yyyyyyyyyyy------ 
yyyyyy----------y----------- 
yyyyyyyyyy-------y----y-yyyy 
yyyyyyyyyyyyyyyyyyyyyy------ 

但是,我的結果是這樣的:

---yyyyyyyyyyyyyyyyyyyy----- 
-----------yyyyyyyyyyy------ 
yyyyyy----------y----------- 
---------------------------- 
---------------------------- 

從紋理的一半到最後,背景像素僅出現。當然,從左上角到一半我得到了正確的結果。

紋理生成代碼如下:

glGenTexture(1, &tex); 
glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_TEXTURE, w, h, 0, GL_DEPTH_TEXTURE, GL_FLOAT, 0); 

和渲染代碼,

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D, tex); 
glCopyTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_TEXTURE, 0, 0, w, h, 0); 

是否有任何glCopyTexImage2D錯誤? W和H是固定的,我不知道爲什麼..

+0

如果你將紋理附加到FBO,因此直接渲染它,爲什麼你要做glCopyTexImage2D? – datenwolf

回答

1

首先,我不知道你如何發佈編譯,因爲沒有這樣的事情,如GL_DEPTH_TEXTURE。然而,有GL_DEPTH_COMPONENT

其次,您應該始終使用大小不等的深度格式。因此,而不是GL_DEPTH_COMPONENT,使用GL_DEPTH_COMPONENT24獲得24位深度緩衝區。請注意,像素傳輸格式(參數的第三個參數)仍應爲GL_DEPTH_COMPONENT

第三,你應該使用glCopyTexSubImage2D,這樣你就不會一直重新分配紋理內存。

+0

+1,看起來像緩衝區大小不匹配。 – Kromster