gpt4 book ai didi

opengl - Sampler2DArray - 设置和使用

转载 作者:行者123 更新时间:2023-12-03 09:01:08 27 4
gpt4 key购买 nike

我正在学习 OpenGL,并且必须使用sampler2DArray。我整天都在煎熬中——毫无结果。我有两个问题:

  1. 如何创建纹理列表?
  2. 如何在着色器中使用sampler2DArray?

这是我尝试创建纹理列表的结果:

// textures - ids loaded textures
private int createTextureArray(GL2 gl, int[] textures, int width, int height) {
int layerCount = textures.length;
int mipLevelCount = 1;
IntBuffer texture = IntBuffer.allocate(1);
gl.glGenTextures(1, texture);
gl.glActiveTexture(GL.GL_TEXTURE0);
gl.glBindTexture(GL2.GL_TEXTURE_2D_ARRAY, texture.get(0));
gl.glTexStorage3D(GL2.GL_TEXTURE_2D_ARRAY, mipLevelCount, GL2.GL_RGBA8, width, height, layerCount);

for (int i = 0; i<textures.length; i++) {
gl.glTexSubImage3D(GL2.GL_TEXTURE_2D_ARRAY, i, // error here
0, 0, 0,
width, height, layerCount,
GL2.GL_RGBA, GL2.GL_UNSIGNED_BYTE,
textures[i]);

}

// Always set reasonable texture parameters
gl.glTexParameteri(GL2.GL_TEXTURE_2D_ARRAY, GL2.GL_TEXTURE_MIN_FILTER, GL2.GL_LINEAR);
gl.glTexParameteri(GL2.GL_TEXTURE_2D_ARRAY, GL2.GL_TEXTURE_MAG_FILTER, GL2.GL_LINEAR);
gl.glTexParameteri(GL2.GL_TEXTURE_2D_ARRAY, GL2.GL_TEXTURE_WRAP_S, GL2.GL_CLAMP_TO_EDGE);
gl.glTexParameteri(GL2.GL_TEXTURE_2D_ARRAY, GL2.GL_TEXTURE_WRAP_T, GL2.GL_CLAMP_TO_EDGE);

return texture.get(0);
}

着色器示例:

#version 130
uniform sampler2DArray textures;
varying vec2 UV;
...
void main() {
...
int layer = 0;
gl_FragColor = texture2DArray(textures, vec3(UV, layer));
}

我将非常感谢您的帮助。

最佳答案

array texture不是“纹理列表”。数组纹理是单个 OpenGL 纹理,其中单独具有许多准独立的层。虽然您可能在概念上将数组纹理的每一层视为单独的概念纹理,但在 OpenGL(和 GLSL)中,它是一个单个对象

鉴于此,您函数中的接口(interface)不正确。它应该返回单个纹理对象,并且应该将一个整数作为参数,而不是一个int数组(注意:OpenGL对象是无符号整数):要在该纹理中创建的数组层数。

如何在 GLSL 中使用数组纹理很简单。采样器的 uniform 使用数组纹理采样器类型(例如用于 2D 数组纹理的 sampler2DArray)。您将数组纹理绑定(bind)到您指定为采样器制服绑定(bind)的同一纹理图像单元(就像对非数组 2D 纹理所做的那样)。

你的 GLSL 缺少一件事。没有texture2DArray函数。正确使用的函数就是texture。 GL 3.0 之后的纹理类型仅由参数指定,不再由函数名称指定。

关于opengl - Sampler2DArray - 设置和使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50091337/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com