我知道程序中可以有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纹理)可以"映射"到纹理单元吗?
只要您不想同时在单个几何体上使用多个纹理,这是完全可能的.实际上这是常见的事情,因为多纹理和纹理单元的目的不是为不同的对象保持不同的纹理,而是在同一对象上使用不同的纹理层.
将纹理单位视为Photoshop中的图层.
归档时间: |
|
查看次数: |
736 次 |
最近记录: |