Нарисуйте Атлас 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
Прямо на вашем необработанном изображении будет работать, только если все ваши плитки находятся в вертикальной линии, а не в виде сетки.