2016-05-07 4 views
0

Я запускаю проект Glut на CodeBlocks, у меня есть класс «imageloader», который я использую для текстурирования сферы с растровым изображением. Он работает просто Fine, когда я указываю местоположение изображения, как это loadTexture(loadBMP("C:\\Users\\Ndumiso\\Desktop\\Project1\\images\\earth.bmp")); Я создал папку под названием «изображения» и скопировал изображение в эту папку. Here's how it looks when you run itC++ OpenGL Texture, не найти изображение

учти, у меня есть один и тот же образ внутри же место, как .exe исполняемый файл (например, бен \ Debug \ 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, особенно с подсоединенным отладчик, Текущий рабочий Dir может быть изменен IDE. Обратитесь к документации IDE, чтобы узнать, как изменить рабочий каталог. Если вы используете Visual Studio, это можно сделать в свойствах проекта в настройках отладчика. По умолчанию это $ (ProjectDir) (папка с файлом .vcxproj). – Drop

ответ

0

Как уже упоминалось в комментариях, его, вероятно, ваш IDE имеет другой рабочий каталог, чем расположение двоичного файла (и файла изображения). По моему опыту, это расположение ваших «проектных» файлов.

Существует post on the Code::Blocks forums, что упоминается как изменить его:

Проект -> Свойства -> Build цели -> [имя целевых] -> Execution работает реж

Если вы дон «т хотите изменить настройки, которые вы могли бы дать относительный путь из файлов проекта:

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

лично я бы оставить рабочий каталог и используйте приведенный выше пример. Затем, когда вы объединяете программное обеспечение для выпуска, двоичный файл может находиться в корне каталога установки, а код все равно может обращаться к изображению с использованием этого относительного пути.

Например:

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