我在OpenGL中有一个用于模型渲染的纹理数组。此数组包含漫反射和镜面反射纹理。由于某些网格没有镜面纹理,我只是在每次渲染后将NULL纹理绑定到我的镜面采样器,如果网格具有镜面纹理,我只绑定一个。但是,我仍然看到没有网格的镜面纹理。
这是我渲染的代码
如果网格没有镜面纹理,materialIndices保存数组中纹理的索引
索引是-1
纹理单元0用于漫射
用于镜面的纹理单元2
void CModel::render()
{
if (!loaded) return;
int numMeshes = meshSize.size();
for (int i = 0; i < numMeshes; i++)
{
int matIndex = materialIndices[i][0];
textures[matIndex].bind(0);
int specIndex = materialIndices[i][1];
if (specIndex >= 0) textures[specIndex].bind(2);
glDrawArrays(GL_TRIANGLES, meshStartIndices[i], meshSize[i]);
glActiveTexture(GL_TEXTURE2);
glBindTexture(GL_TEXTURE_2D, NULL);
}
}
答案 0 :(得分:4)
我认为问题在于这一行:
glActiveTexture(GL_TEXTURE2);
你说你使用纹理单位0和1,但是你在这里重置了纹理单元2.也许它只是一个错字?