Opengl es 在OpenGL ES 3.x中使用Sampler3D读取3D纹理
我正在使用OpenGL ES 3.2读取片段着色器中的3D纹理,并将该值写入FBO。然后,我使用glReadPixels读取FBO附件,并打印出获得的值 我随附取样器,如下所示:Opengl es 在OpenGL ES 3.x中使用Sampler3D读取3D纹理,opengl-es,3d-texture,opengl-es-3.1,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, textur
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之间 让我猜猜:您没有正确初始化纹理。
请显示纹理创建代码。这很可能是因为3D纹理未绑定为分层 看看这个: