2014-12-30 92 views
0

我有一个用于OpenGL模型渲染的纹理数组。该数组拥有漫反射和镜面纹理。由于一些网格物体没有镜面纹理,我只需在每次渲染后将NULL纹理绑定到我的镜面采样器,并且如果网格具有镜面纹理,我只绑定一个。但是,我仍然看到没有一个网格的镜面纹理。

这是我的代码用于呈现
materialIndices保持在阵列中的纹理的索引,如果网状不具有镜面纹理
的索引为-1
纹理单元0弥漫
纹理单元2镜面
OpenGL纹理解除绑定

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的镜面反射,这是一个错误的问题 –