繁体   English   中英

如何从纹理数组中选择纹理层以在OpenGL中渲染?

[英]How to choose texture layer from texture array for rendering in OpenGL?

我正在将3个纹理加载到数组中

int width = 1024;
int height = 1024;
GLuint ID;
glGenTextures(1, &ID);
glBindTexture(GL_TEXTURE_2D_ARRAY, ID);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexStorage3D(GL_TEXTURE_2D_ARRAY, 1, GL_RGBA8, width, height, 3)
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 0, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[0]);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 1, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[1]);
glTexSubImage3D(GL_TEXTURE_2D_ARRAY, 0, 0, 0, 2, width, height, 1, GL_RGBA, GL_UNSIGNED_BYTE, data[2]);
glBindTexture(GL_TEXTURE_2D_ARRAY, 0);

如果我使用即时模式,在glBindTexture(GL_TEXTURE_2D_ARRAY,ID)之后,如何通过glTexCoord2f(...)判断要使用哪个图层从纹理绘制? 我必须使用某些特定方法吗?

即时模式不是问题,固定功能管道是-纹理数组只能使用着色器采样。 如果使用着色器,则可以使用某种方式将所需的图层索引传递给着色器(作为属性-泛型或内置,统一,使用其他一些缓冲区对象,从其他对象中计算出来,无论如何...)。

如果使用固定功能管道,则根本无法实现。 您只能切换到3D纹理来模拟阵列纹理,但是会遇到更严格的尺寸限制,并且在使用滤镜采样时会产生更多开销。

但是,在2017年根本没有充分的理由使用立即模式和/或固定功能管道。这些东西在十年前已经过时了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM