我正在使用OpenGL ES 3.2从片段着色器中的3D纹理中读取并将该值写入FBO。然后我使用glReadPixels读取FBO附件,并打印出所获得的值。
我将采样器附加为:
GLuint texLoc = glGetUniformLocation(shader_program_new, "input_tex");
glUniform1i(texLoc, 0);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_3D, texture_output);
在着色器中,我从纹理中读取:
#version 300 es
precision highp float;
precision highp sampler3D;
uniform sampler3D input_tex;
in vec3 tex_pos;
out vec4 fragmentColor;
void main() {
fragmentColor = texture(input_tex, vec3(0.0, 0.0, 0.0)); // nonzero z co-ordinate doesn't work
}
从纹理读取时,我只能读取z坐标为0的值。从任何其他深度读取值会产生垃圾值或NAN。
3D纹理不应该允许我使用(x,y,z)值作为纹理坐标,其中x,y和偶数z 可以介于0.0和1.0之间?
答案 0 :(得分:0)
让我猜:您没有正确初始化纹理。
请显示纹理创建代码。
答案 1 :(得分:0)
这很可能是由于3D纹理未绑定为分层的。