2016-05-07 67 views
0

我正在CodeBlocks上運行Glut項目,我有一個類「imageloader」,我正在使用紋理與位圖圖像的球體。它工作的很好,當我指定像這樣的圖像的位置loadTexture(loadBMP("C:\\Users\\Ndumiso\\Desktop\\Project1\\images\\earth.bmp"));我創建了一個名爲「圖像」的文件夾並將圖像複製到該文件夾​​中。 Here's how it looks when you run itC++ OpenGL紋理,找不到圖像

你要知道,我也有相同的地方內的同一圖像的.exe可執行文件(即BIN \調試\ earth.bmp)

但我失敗時,我不喜歡這樣loadTexture(loadBMP("earth.bmp"));它無法找到圖像。

我不能使用上面的方法,長時間的絕對路徑,導致每次項目進入不同的計算機時,在運行項目之前必須每次更改路徑,否則會給您一個錯誤。所以我不能像這樣提交我的項目。

這裏只是一個在我main.cpp中的代碼片段(讓我知道如果你需要更多的代碼):

//Makes the image into a texture, and returns the id of the texture 
GLuint loadTexture(Image* image) { 
    GLuint textureId; 
    glGenTextures(1, &textureId); //Make room for our texture 
    glBindTexture(GL_TEXTURE_2D, textureId); //Tell OpenGL which texture to edit 
    //Map the image to the texture 
    glTexImage2D(GL_TEXTURE_2D,    //Always GL_TEXTURE_2D 
       0,       //0 for now 
       GL_RGB,      //Format OpenGL uses for image 
       image->width, image->height, //Width and height 
       0,       //The border of the image 
       GL_RGB, //GL_RGB, because pixels are stored in RGB format 
       GL_UNSIGNED_BYTE, //GL_UNSIGNED_BYTE, because pixels are stored 
            //as unsigned numbers 
       image->pixels);    //The actual pixel data 
    return textureId; //Returns the id of the texture 
} 



GLuint _textureId2; 

void initRendering() { 
    glEnable(GL_DEPTH_TEST); 
    glEnable(GL_LIGHTING); 
    glEnable(GL_LIGHT0); 
    glEnable(GL_NORMALIZE); 
    glEnable(GL_COLOR_MATERIAL); 
    quad = gluNewQuadric(); 

    _textureId2 = loadTexture(loadBMP("C:\\Users\\Ndumiso\\Desktop\\TestClasses\\images\\earth.bmp")); 
} 
+0

當運行在IDE的程序,特別是與調試器連接,當前工作目錄可能是由IDE來改變。請參閱IDE的文檔以瞭解如何更改工作目錄。如果使用Visual Studio,則可以在調試器設置中的項目屬性中完成。它是$(ProjectDir)默認情況下(與.vcxproj文件的文件夾)。 – Drop

回答

0

正如評論所說,它可能是你的IDE具有比不同的工作目錄二進制文件的位置(和你的圖像文件)。根據我的經驗,這是您的「項目」文件的位置。

有一個post on the Code::Blocks forums是提到怎麼改:

項目 - >屬性 - >建設目標 - > [目標名稱] - 工作>執行目錄

如果你不「不想改變設置,你可以從你的項目文件給出一個相對路徑:

loadTexture(loadBMP("images/earth.bmp")); 

我個人將離開工作目錄單獨使用上面的例子。然後,當您將軟件捆綁發佈時,二進制文件可以位於安裝目錄的根目錄,並且代碼仍然可以使用該相對路徑訪問映像。

例如:

/install_dir 
/install_dir/program.exe 
/install_dir/images/earth.bmp