У меня есть массив текстур для рендеринга моделей в 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);
}
}
Я думаю, что проблема в этой строке:
glActiveTexture(GL_TEXTURE2);
Вы сказали, что используете текстурные блоки 0 и 1, но здесь вы сбрасываете текстурный блок 2. Может быть, это просто опечатка?