2016-05-07 7 views
0

私はCodeBlocksでGlutプロジェクトを実行していますが、私はビットマップ画像で球体をテクスチャリングするためのクラス "imageloader"を持っています。このような画像の場所を指定するとうまく動作しますloadTexture(loadBMP("C:\\Users\\Ndumiso\\Desktop\\Project1\\images\\earth.bmp")); "images"という名前のフォルダを作成し、そのフォルダに画像をコピーしました。 .exe実行ファイル(つまり、ビン\デバッグ\ earth.bmp)C++ OpenGLテクスチャ画像が見つかりません

あるよう Here's how it looks when you run it

は、あなたの心は、私はまた同じ場所内の同じイメージを持っているが、私はこの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のドキュメントを参照してください。 Visual Studioを使用する場合は、デバッガ設定のプロジェクトプロパティで実行できます。既定では$(ProjectDir)です(.vcxprojファイルのあるフォルダ)。 – Drop

答えて

0

、その可能性があなたのIDEには、より異なる作業ディレクトリを持っていますバイナリ(およびイメージファイル)の場所。私の経験上、それはあなたの "プロジェクト"ファイルの場所です。

は、変更する方法を言及post on the Code::Blocks forumsがあります: - >プロパティ - >ターゲットのビルド - > [対象の名前] -

プロジェクト>実行作業ディレクトリ

もしをあなたドン「tはあなたのプロジェクトファイルからの相対パスを与えることができる設定を変更する:

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

私は個人的に作業ディレクトリを残すだろう上記の例を使用してください。リリース用のソフトウェアをバンドルすると、バイナリはインストールディレクトリのルートに置かれ、コードはその相対パスを使用してイメージにアクセスできます。例えば

:あなたは、特に添付のデバッガと、IDEでプログラムを実行すると

/install_dir 
/install_dir/program.exe 
/install_dir/images/earth.bmp 
関連する問題