2

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

在此处输入图像描述

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

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

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

我只找到了一些例子,如何从数组中选择和应用整个纹理,但如果在我们的数组中存储纹理图集,则没有任何关系。

4

1 回答 1

2

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

#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仅当所有图块都在垂直线上而不是网格中时,才能在原始图像上直接使用幼稚(也是最简单的)方法。

于 2016-11-12T12:02:35.703 回答