在纹理数组中绘制 Texture2D 图集

Draw Texture2D atlas inside Texture Array

如何通过 GLSL Sampler 仅绘制存储在 Texture Array 中的 Texture2D Atlas 的一部分? 例如我有纹理图集,我会将它们放在一起(与其他相同大小的图集) 在 Texture2D 数组中。 (glTexSubImage3D)

那么,在那种情况下我的采样器应该是什么样子的?

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

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

我只找到了示例,如何 select 应用数组中的整个纹理,但如果在我们的数组中则没有任何相关内容 我们存储纹理图集。

幸运的是,这是我最近一直在工作的领域,要在片段着色器中使用二维纹理数组,您可以执行以下操作:

#version 330

uniform sampler2DArray tex;

flat in uint fragLayer;
in vec2 fragTexCoord;

out vec4 colour;

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

所以纹理层是用于访问纹理数组中各个像素的 3d 向量的第三个元素。

另请注意,直接在原始图像上使用天真(也是最简单的)glTexSubImage3d 仅当所有图块都在垂直线上而不是网格时才有效。