Использование 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-текстуру

Другие вопросы по тегам