0
我試圖執行一些程序並使用這個經典代碼:是否可以渲染3D紋理深度緩衝OpenGL中
glBindFramebuffer(GL_FRAMEBUFFER, framebuffer);
綁定深度緩衝。
glGenRenderbuffers(1, &depthbuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthbuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, width,
height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, depthbuffer);
綁定幾個3D紋理:
glGenTextures(targets.size(), textures);
for (auto &target : targets) {
glBindTexture(GL_TEXTURE_3D, textures[ix]);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA32F, width, height, depth, 0, GL_RGBA, GL_FLOAT, NULL);
}
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + ix, textures[ix], 0);
buffers[ix] = GL_COLOR_ATTACHMENT0 + ix;
++ix;
}
glDrawBuffers(targets.size(), buffers);
而且它不工作,這表明GL_FRAMEBUFFER_INCOMPLETE_LAYER_TARGETS
錯誤。我認爲,因爲我的紋理是分層的,所以沒有分層深度緩衝區可能會有問題。我用與3D紋理相同的方式創建了它,所以我刪除了深度緩衝區。這個解決的任務,現在我的幀緩衝區正在工作,渲染完成等。
但是如果我需要渲染每個圖層並附加了深度緩衝區,該怎麼辦?是否支持這種功能,是否有一些很少API調用來實現這一點?
我不相信有深度格式的3D紋理。所以它必須是二維數組紋理。 –
@ReetoKoradi:在OpenGL API中沒有限制。 –
有點太長,以至於不能完整引用此處,但請檢查4.5規範的第191頁上的最後一段,從「基本內部格式爲DEPTH_COMPONENT的紋理...」開始。 –