Использование Sampler3D для чтения из 3D-текстуры в OpenGL ES 3.x
Я использую OpenGL ES 3.2 для чтения из 3D-текстуры во фрагментном шейдере и записи этого значения в FBO. Затем я читаю из приложения FBO, используя glReadPixels, и распечатываю полученные значения.
Я прилагаю сэмплер как:
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.
Разве трехмерная текстура не должна позволять мне использовать (x, y, z) значения в качестве координат текстуры, где x, y и даже z могут быть между 0,0 и 1,0?
0 ответов
Дай угадаю: ты неправильно инициализировал текстуру.
Пожалуйста, покажите код создания текстуры.
Скорее всего, это связано с тем, что 3D-текстура не привязана как наслоенная.
Взгляните на это: Вычислить шейдер, не изменяющий 3D-текстуру