我遇到深度緩衝區問題。我想投入一個紋理。但它似乎並不奏效。OpenGL深度緩衝區紋理(針對各種圖像大小)
所以,這裏的一段代碼,我執行渲染對象後:
glGenTextures(1, (GLuint*)&_depthTexture);
glBindTexture(GL_TEXTURE_2D, _depthTexture);
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);
const pair<int, int> &img_size = getImageSize();
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32, img_size.first, img_size.second, 0, GL_DEPTH_COMPONENT, GL_FLOAT, 0);
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, img_size.first, img_size.second);
glClear(GL_DEPTH_BUFFER_BIT);
的事情是(我用OpenGL 3.2以上版本),用於渲染的圖像有不同的尺寸。大多數情況下,大小不會超過2^j。那麼,這是一個問題嗎?
而且,問題的另一部分可能是在片段着色器後:
#version 140
uniform sampler2D depthTexture;
uniform ivec2 screenSize;
out vec4 outColor;
void main()
{
vec2 depthCoord = gl_FragCoord.xy/screenSize.xy;
float d = texture2D(depthTexture, depthCoord).x;
outColor = vec4(d, d, d, 1.0);
}
之後,當我使第二次一些的形狀,我想用以前的深度(紋理深度緩衝區),做一些效果。
但嚴重......任何人都可以告訴我一段代碼,您可以將深度緩衝區放入紋理中?我不在乎它是渲染到紋理還是紋理在渲染之後被提取出來!只要我具有深度值的紋理來完成第二遍......這就是重要的!
「它以什麼方式不起作用? –
我的形象是黑色的!而根據其他網站,深度緩衝區應該看起來是白色,當它遠近黑色時......但是我的一半圖像應該是白色的......至少是新三角形覆蓋的部分! – widgg
「深度緩衝區應該看起來像是白色,當它遠離黑色並且靠近黑色時」這取決於存儲在那裏的內容。如果您使用默認的深度範圍,那麼這將是真實的。 –