Нарисуйте Атлас Texture2D внутри массива текстур

Как нарисовать через GLSL Sampler только часть Atlas Texture2D, хранящуюся в массиве текстур? Например, у меня есть Атлас текстур, и я соберу их вместе (с другими атласами того же размера) внутри массива Texture2D. (GlTexSubImage3D)

введите описание изображения здесь

Ну, как должен выглядеть мой сэмплер в этом случае?

https://www.opengl.org/wiki/Array_Texture

https://www.opengl.org/wiki/Sampler_(GLSL)

Я нашел только примеры, как выбрать и применить целую текстуру из массива, но ничего не связано, если внутри нашего массива мы храним текстурный атлас.

1 ответ

Решение

К счастью, это та область, в которой я недавно работал, и чтобы использовать массив 2D-текстур в фрагментном шейдере, вы можете сделать что-то вроде следующего:

#version 330

uniform sampler2DArray tex;

flat in uint fragLayer;
in vec2 fragTexCoord;

out vec4 colour;

void main()
{
    colour = texture( tex, vec3( fragTexCoord, fragLayer ) );
}

Таким образом, слой текстуры является третьим элементом трехмерного вектора, который используется для доступа к отдельным пикселям в массиве текстур.

Также обратите внимание, что используя наивный (и самый простой) glTexSubImage3d Прямо на вашем необработанном изображении будет работать, только если все ваши плитки находятся в вертикальной линии, а не в виде сетки.

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