1
我想渲染一组点到3D纹理中。但不知何故,我不写它。使用glGetTexImage()我只能得到0的每个条目。我将3D纹理存储在Framebuffer中,并且使用不同的渲染通道,我想从存储在帧缓冲区中的3Dtexture中读出信息。渲染成3D纹理
Initialization of the FrameBuffer.
glGenFramebuffers(1, &_fbo);
glBindFramebuffer(GL_FRAMEBUFFER, _fbo);
glGenTextures(1, &texture);
glBindTexture(GL_TEXTURE_3D, texture);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_3D, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE);
glTexImage3D(GL_TEXTURE_3D, 0, GL_RGBA, GRID_SIZE, GRID_SIZE, GRID_SIZE, 0, GL_RGBA, GL_FLOAT, NULL);
glFramebufferTexture3D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_3D, texture, 0, 0);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) == GL_FRAMEBUFFER_COMPLETE) {
std::cout << "FBO successfully loadet" << std::endl;
}else{
std::cout << "FBO had en ERROR" << std::endl;
}
顶点着色器:
#version 330 core
layout (location = 0) in vec3 position;
void main(){
gl_PointSize = 1.0;
gl_Position = vec4(position,1.0);
}
片段着色器:
#version 330 core
out vec4 fragColor;
void main(){
fragColor = vec4(1.0,1.0,1.0, 1.0);
}
我与正常的尝试过渲染过程和在3D纹理单独地存储这些点之前。这似乎工作。但是现在使用帧缓冲区,它只写入0。
目前还不清楚你想要达到的目标。您只能渲染到一个3d纹理的图层,而不是整个纹理。 – BDL
那么我必须分别渲染每个图层吗?这将是256次。我如何渲染到某个图层? – Dominick
你已经做了渲染到一个特定的层,那就是'glFrameBufferTexture3D'的'layer'参数是用于帽子的。您可能可以使用_layered_帧缓冲区获得某些内容,但无法一次渲染到256个图层。 – derhass