将texture2d_array<float>传递给片段着色器的正确方法是使用纹理单元和采样器对象。
首先,需要在片段着色器中声明一个采样器对象,并将其绑定到纹理单元。这可以通过以下方式完成:
#version 330 core
uniform sampler2DArray textureArray; // 声明采样器对象
in vec2 TexCoord; // 片段着色器输入的纹理坐标
void main()
{
vec4 color = texture(textureArray, vec3(TexCoord, layerIndex)); // 使用采样器对象从纹理数组中获取颜色
// 进行其他操作
// ...
}
然后,在应用程序中,需要设置纹理单元和绑定纹理数据到采样器对象。以下是一个示例代码:
// 创建纹理对象
GLuint textureArray;
glGenTextures(1, &textureArray);
glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
// 设置纹理参数
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
// 加载纹理数据到纹理对象
glTexImage3D(GL_TEXTURE_2D_ARRAY, 0, GL_RGBA, width, height, numLayers, 0, GL_RGBA, GL_FLOAT, data);
// 绑定纹理单元和采样器对象
glActiveTexture(GL_TEXTURE0); // 设置纹理单元为0
glBindTexture(GL_TEXTURE_2D_ARRAY, textureArray);
glUniform1i(glGetUniformLocation(shaderProgram, "textureArray"), 0); // 将纹理单元绑定到采样器对象
// 渲染过程中,绘制三角形并传递纹理坐标给片段着色器
glDrawArrays(GL_TRIANGLES, 0, 3);
在上述代码中,需要注意以下几点:
推荐的腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云