Отмена привязки текстур OpenGL

У меня есть массив текстур для рендеринга модели в 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);
    }
}

person KVP_    schedule 30.12.2014    source источник
comment
это старый opengl без шейдера?   -  person Irrational Person    schedule 30.12.2014
comment
Вы должны сделать glBindTexture(GL_TEXTURE_2D, 0). NULL - это тип указателя, но glBindTexture принимает целое число.   -  person Colonel Thirty Two    schedule 30.12.2014


Ответы (1)


Думаю, проблема в этой строке:

glActiveTexture(GL_TEXTURE2);

Вы сказали, что используете текстурные блоки 0 и 1, а здесь вы сбрасываете текстурный блок 2. Может это просто опечатка?

person Nazar554    schedule 30.12.2014
comment
Извините, я имел в виду текстурный блок 2 для зеркального отражения, это была опечатка в вопросе - person KVP_; 31.12.2014