2014-12-30 5 views
0

У меня есть массив текстур для рендеринга модели в OpenGL. Этот массив содержит диффузные и зеркальные текстуры. Поскольку некоторые сетки не имеют зеркальной текстуры, я просто привязываю текстуру NULL к моему зеркальному семплеру после каждого рендеринга, и я связываю его только в том случае, если сетка имеет зеркальную текстуру. Тем не менее, я до сих пор вижу зеркальные текстуры на сетках, у которых их нет.

Это мой код для рендеринга
materialIndices содержит индекс текстуры в массиве, если сетка не имеет зеркальную текстуру
индекс -1
текстурник 0 диффузного
текстуры блок- для зеркального
OpenGL texture unbinding

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); 
    } 
} 
+1

это старый opengl без шейдера? –

+1

Вы должны сделать 'glBindTexture (GL_TEXTURE_2D, 0)'. 'NULL' - тип указателя, но' glBindTexture' принимает целое число. –

ответ

4

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

glActiveTexture(GL_TEXTURE2); 

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

+0

Извините, я имел в виду текстурную единицу 2 для зеркальной, это была опечатка в вопросе –

 Смежные вопросы

  • Нет связанных вопросов^_^