在Texture Array中绘制Texture2D图册

时间:2016-11-12 11:19:06

标签: c++ opengl texture2d texture-atlas

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

enter image description here

那么,在这种情况下我的采样器应该如何?

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

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

我只找到了一些例子,如何选择&从Array中应用整个纹理,但如果在我们的Array中没有任何相关内容 我们存储纹理图集。

1 个答案:

答案 0 :(得分: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 ) );
}

因此纹理图层是用于访问纹理数组中单个像素的3d矢量的第3个元素。

另请注意,在原始图像上使用天真(和最简单)glTexSubImage3d直线只有在所有切片都在垂直线而不是网格时才会起作用。