我可以将一个纹理单元用于5种不同的2D纹理

vik*_*eid 0 opengl textures

我知道程序中可以有GL_MAX_TEXTURE_IMAGE_UNITS纹理单元OpenGL.但我们假设我只使用一个.假设我有5个2D纹理.我可以将它们"映射"到单个纹理单元(TEXTURE0)以渲染所有这些纹理单元.我的意思是我会这样做:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//specify tex data and tex params for tex1

glBindTexture(GL_TEXTURE_2D, tex2);
//specify tex data and tex params for tex1
Run Code Online (Sandbox Code Playgroud)

..等等所有5个纹理

渲染循环:

glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, tex1);
//draw

glBindTexture(GL_TEXTURE_2D, tex2);
//draw
Run Code Online (Sandbox Code Playgroud)

..等等所有5个纹理

在片段着色器中,我只使用1个sampler2d变量,该变量初始化为零(对于纹理单元0)

如果这不能正常工作,那么我应该使用5个不同的纹理单位(TEXTURE0, TEXTURE0+1, ....TEXTURE0+5)并将每个纹理"映射"到不同的纹理单元.

最重要的问题:如果我的第一种方法是正确的,那么有多少2D纹理(我现在只讨论2D纹理)可以"映射"到纹理单元吗?

dat*_*olf 5

只要您不想同时在单个几何体上使用多个纹理,这是完全可能的.实际上这是常见的事情,因为多纹理和纹理单元的目的不是为不同的对象保持不同的纹理,而是在同一对象上使用不同的纹理层.

将纹理单位视为Photoshop中的图层.