2013-03-26 87 views
1

我試圖在OpenGL中簡單地加載6張圖片作爲立方體紋理。 Blow是加載代碼:OpenGL中的立方體貼圖根本不顯示

glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR); 

glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); 
glTexParameteri(GL_TEXTURE_CUBE_MAP_ARB, GL_TEXTURE_WRAP_R, GL_CLAMP_TO_EDGE); 

for (int i = 0;i < 6;++i) 
{ 
    int width, height, channel; 
    unsigned char* img = SOIL_load_image(skybox[i].c_str(), &width, &height, &channel, SOIL_LOAD_AUTO); 
    glTexImage2D(cubeTarget[i], 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 
    delete img; 
} 

glEnable(GL_TEXTURE_CUBE_MAP_ARB); 

渲染代碼被傳遞。奇怪的是渲染的立方體是白色的。看起來紋理完全沒有加載。我改變加載代碼看2D紋理是否將工作:

glGenTextures(1, texture); 
glBindTexture(GL_TEXTURE_2D, texture[0]); 
int width, height, channel; 
unsigned char* img = SOIL_load_image(skybox[0].c_str(), &width, &height, &channel, SOIL_LOAD_AUTO); 
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, img); 
delete img; 

if(texture[0] == 0) return false; 

glBindTexture(GL_TEXTURE_2D, texture[0]); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 

glEnable(GL_TEXTURE_2D); 

結果是我可以看到紋理畢竟,不管如何分配怪造成的紋理座標。我收集了以下信息:

  1. 我用於加載圖像的lib運行良好;

  2. 立方體貼圖的設置來自SuperBibble第9章。當我編譯本書的代碼時,幾乎相同的代碼將很好地工作。

順便說一句,有沒有人有關於加載圖像庫的一些建議?我使用的一個似乎停止更新很長一段時間...

附加:我現在發現是,如果我嘗試只加載一個IMG作爲所有天空盒面'紋理,它會顯示。只要使用一個變量來替換一個特定的值,什麼都不會顯示。

+0

你在哪裏設置mipmap? (如果你不這樣做,爲什麼你啓用它們?) – JasonD 2013-03-26 08:13:53

+0

@JasonD你的意思是縮小過濾器?我其實並沒有建立mipmap。當我將其更改爲GL_LINEAR時,它仍然不起作用。所以我想這不是問題。 – Narusaki 2013-03-26 08:23:19

+0

「*我使用的似乎停止更新很長一段時間...... *」土壤?土壤是*完整*;它擁有所有者想要賦予的所有功能。在這一點上,沒有必要更新它。 – 2013-03-26 09:06:30

回答

0

最後我弄明白了。這是因爲最後一張圖片的分辨率爲與其他圖片不同。

真是種浪費了很多時間。