gpt4 book ai didi

c++ - 检索最终场景 z 缓冲区和颜色缓冲区

转载 作者:行者123 更新时间:2023-11-30 02:57:45 26 4
gpt4 key购买 nike

我正在研究 opengl 2.1 和 opengl es 2.0。我想为整个场景实现景深效果。我知道如何为带有着色器的单个模型执行此操作,但这将要求所有模型都具有具有相同代码的着色器。有没有办法检索最终场景深度和颜色缓冲区并将它们存储到纹理中,以便我可以再次将它们与 DOF 着色器一起使用?或者这是个坏主意?

[编辑]终于让它工作了。初始化代码如下所示:

glGenFramebuffers(1, &frameBuffer_);
glGenTextures(1, &colorBuffer_);
glGenTextures(1, &depthBuffer_);
//glGenRenderbuffers(1, &depthBuffer_);

glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer_);

glBindTexture(GL_TEXTURE_2D, colorBuffer_);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_RGBA,
width,
height,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
NULL);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_COLOR_ATTACHMENT0,
GL_TEXTURE_2D, colorBuffer_, 0);

glBindTexture(GL_TEXTURE_2D, depthBuffer_);
glTexImage2D(
GL_TEXTURE_2D,
0,
GL_DEPTH24_STENCIL8,
width,
height,
0,
GL_DEPTH_STENCIL,
GL_UNSIGNED_INT_24_8,
NULL);

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glFramebufferTexture2D(
GL_FRAMEBUFFER,
GL_DEPTH_ATTACHMENT,
GL_TEXTURE_2D, depthBuffer_, 0);

//glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer_);
//glRenderbufferStorage(
// GL_RENDERBUFFER,
// GL_DEPTH_COMPONENT24,
// width,
// height);
//glFramebufferRenderbuffer(
// GL_FRAMEBUFFER,
// GL_DEPTH_ATTACHMENT,
// GL_RENDERBUFFER, depthBuffer_);

GLenum status;
status = glCheckFramebufferStatus(GL_DRAW_FRAMEBUFFER);
switch(status) {
case GL_FRAMEBUFFER_COMPLETE:
// Success.
break;
case GL_FRAMEBUFFER_UNSUPPORTED:
LOGE("Frame buffer format not supported.");
break;
default:
LOGE("Framebuffer Error.");
}

然后在渲染第一次调用时:

glBindFramebuffer(GL_FRAMEBUFFER, frameBuffer_);

渲染场景,然后调用:

glBindFramebuffer(GL_FRAMEBUFFER, 0);

现在任何东西都可以在这里使用 depthBuffer_ 或 colorBuffer_ 作为 OpengGL 纹理句柄来渲染。

最佳答案

使用帧缓冲对象。它们是 OpenGL-ES-2 的一部分,可作为 OpenGL-2.1 的扩展(得到良好支持)。

https://github.com/datenwolf/codesamples/tree/master/samples/OpenGL/minimalfbo

在桌面 OpenGL-2.x 上使用扩展的最小工作示例

关于c++ - 检索最终场景 z 缓冲区和颜色缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14224307/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com