Как работает sampler2DArrayShadow в glsl

Я не могу понять, как использовать sampler2DAprrayShadows и как это работает. Есть часть этого, что нам нужно использовать значения текстуры глубины (GL_DEPTH_COMPONENT), чтобы получить результат сравнения с глубиной ref. Но тогда как использовать возвращаемое значение float для получения текселя.

Ссылка получена с: http://www.khronos.org/opengles/sdk/docs/manglsl/xhtml/texture.xml

Я написал небольшой код для его проверки, как показано ниже: Мой фрагментный шейдер:

in highp vec2 texcoord;
in highp vec4 basecolor;
out highp vec4 myFragColor;

uniform highp sampler2DArrayShadow basetexture;

void main(void)
{
    highp vec3 coords = (vec3(texcoord, 0.0) + vec3(1.0, 1.0, 1.0)) / 2.0;
    highp float depth = texture(basetexture, vec4(coords.x, coords.y, coords.z, -0.5));
    myFragColor = vec4(depth * basecolor);

}

Создал 3D-текстуру (texdata) и привязал ее как:

glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_COMPARE_MODE,  GL_COMPARE_REF_TO_TEXTURE);
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_DEPTH_COMPONENT16, TEX_SIZE, TEX_SIZE, TEX_SIZE, 0, GL_DEPTH_COMPONENT, GL_UNSIGNED_SHORT, texdata);

person user1896853    schedule 10.01.2013    source источник
comment
Вы не можете сделать это в OpenGL ES 2.0   -  person Kimi    schedule 10.01.2013
comment
На ваш вопрос ответили на форуме OpenGL opengl.org/discussion_boards/showthread.php/   -  person wip    schedule 02.04.2013


Ответы (1)


возможно, это может вам помочь: руководство по созданию кубической карты глубины

И, честно говоря, вы должны создать объект кадрового буфера, который привязывает текстуру 2D-глубины вместо текстуры Cubemap. Если вы хотите использовать сэмплер: sampler2DArrayShadow, вам просто нужно перегрузить текстуру функции glsl, которая является текстурой ( Sampler2DArrayShadow gSampler, Vec4 P, [смещение с плавающей запятой]). P.z — это номер 2D-текста, а P.w — ссылка значение глубины. Смещение по умолчанию равно 0, вы можете игнорировать его, если оно вам не нужно.

person Jacques Pacino    schedule 26.04.2018
comment
Пожалуйста, напишите здесь решение вместо включения ссылки, которая может быть неработающей в будущем. Спасибо! - person Ignacio Ara; 26.04.2018
comment
@IgnacioAra Это SO-ссылка, и связанный пост вряд ли будет удален (это могут сделать только модераторы, и они этого не сделают). - person Filnor; 26.04.2018
comment
Это должен быть комментарий, а не ответ. Если это повторяющийся вопрос, проголосуйте за закрытие как такового и/или оставьте комментарий, как только вы заработать достаточную репутацию. Если нет, адаптируйте ответ к этому конкретному вопросу. - person Filnor; 26.04.2018