2014-12-30 142 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的鏡面反射,這是一個錯誤的問題 –