在纹理数组中绘制 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
仅当所有图块都在垂直线上而不是网格时才有效。
如何通过 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
仅当所有图块都在垂直线上而不是网格时才有效。