2014-01-31 25 views
0

我一直在嘗試使用SOIL庫將磁盤上存儲的十個圖像讀入一個數組指針。然後我想使用3D紋理在OpenGL中渲染結果數據。C++ - 在一個數組中放置多個圖像指針

我寫的從磁盤讀取圖像並將它們存儲在緩衝區中的代碼會引發錯誤Access violation reading location 0x00000000錯誤。

這是使用SOIL將多個圖像存儲到數組指針的正確方法嗎?

unsigned char *tex; 
int imSize = h*w; 

unsigned char *buff = new unsigned char[h * w * slices]; 

for(int i = 1; i<=10; i++) 
{ 
    for(int j = 0; j<imSize; j++) 
    { 
     if (i==1) 
     { 
      tex = (unsigned char*) SOIL_load_OGL_texture("Data/PA_170090.png", 
        SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID,SOIL_FLAG_INVERT_Y); 

      buff[((i-1)*imSize) + j] = tex[j]; } 

     if (i==2) 
     { tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170091.png", 
        SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y); 
      buff[(i-1)*imSize + j] = tex[j]; } 

     if (i==3) 
     { tex = (unsigned char*)SOIL_load_OGL_texture("Data/PA_170092.png", 
        SOIL_LOAD_AUTO,SOIL_CREATE_NEW_ID, SOIL_FLAG_INVERT_Y); 
      buff[(i-1)*imSize + j] = tex[j];} 

     .... 
     .... // up to 10 images 

    } 
} 
+0

注意,將紋理的名稱放在數組中,並通過數組索引來獲取它們,爲什麼你的工作很難? – Dabo

+0

這是真的。我只是在使用SOIL庫,在線文檔提供了覆蓋現有變量/指針的方法。 http://www.lonesock.net/soil.html – Eagle

回答

2

看來SOIL_load_OGL_texture,沒有返回任何緩衝區。相反,它會返回一個Id(類型爲GLuint,即unsigned int)。如果該功能失敗,該ID將爲零。您正在將該整數值轉換爲指針並對其進行解引用,這會導致訪問衝突。

+0

有趣。我不知道。我假設這會直接將圖像數據加載到指針。 有沒有辦法將圖像文件加載到數組指針中?代碼看起來合理嗎?我的印象可能是錯誤的。 – Eagle

+1

@Eagle嘗試使用SOIL_load_image方法將圖像加載到unsigned char *。 http://en.wikibooks.org/wiki/OpenGL_Programming/Modern_OpenGL_Tutorial_06#Using_SOIL – sajas

+0

很酷,正是我需要的!謝謝! :) – Eagle

相關問題