使用Sampler3D从OpenGL ES 3.x中的3D纹理中读取

时间:2017-06-04 05:14:35

标签: opengl-es 3d-texture opengl-es-3.1

我正在使用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之间?

2 个答案:

答案 0 :(得分:0)

让我猜:您没有正确初始化纹理。
请显示纹理创建代码。

答案 1 :(得分:0)

这很可能是由于3D纹理未绑定为分层的。

看看这个:Compute shader not modifying 3d texture