FC15上のC OpenGLプログラミングでは、EclipseとSDLのテクスチャに奇妙な問題があります。3Dテクスチャをロード:Linux上のSDL/OpenGL Eclipse
セットアップテスト目的のために、訥河のサンプルコードが使用されている:プログラムの実行 http://bigdaddysurf.com/blog/?p=21
を、我々は
$ make
$ ./lesson07
とコンソール上でそれを実行した場合のテクスチャをロードするには - それゆえ、すべての環境に必要なlibがインストールされ、Linux開発環境に存在します。しかし、IDE Eclipseで同じことをしようとすると、プログラムは実行されますが、テクスチャはロードされないので、テクスチャのない白いボックスしか見ることができません。
プロジェクト環境のセットアップには、などSDL、SDLmain、SDL_image、GL、GLU、などリンカーライブラリー(L)へのLIBS、持っている - 例えば:SDLと OpenGL and GLUT in Eclipse on OS X
プログラムの正常に動作しますキーボードなどで入力します。ただし、テクスチャは読み込まれません。私がすることが観察され、IDEのEclipse上で自動的に生成されたMakefileを読んで、そして、
CC = gcc -Wall -ansi
all:
$(CC) lesson07.c -o lesson07 -lGL -lGLU `sdl-config --cflags --libs`
:Makefileで
は、コンソールのコマンドラインを実行に使用されること訥河から提供された、私は次の情報を気づきました明らかにこの追加のフラグはありません:sdl-config --cflags --libs
。この追加のフラグは、コマンドSDL_LoadBMPがテクスチャを表示しないようにするものですか?
もしそうなら、生成されたIDE Makefileを正しく動作させるためにEclipseの設定に対してこの追加情報を適切に調整する方法に関するいくつかの提案がありますか?テクスチャがロードされている方法について
は、ここにある機能:
int LoadGLTextures()
{
/* Status indicator */
int Status = FALSE;
/* Create storage space for the texture */
SDL_Surface *TextureImage[1];
/* Load The Bitmap, Check For Errors, If Bitmap's Not Found Quit */
if ((TextureImage[0] = SDL_LoadBMP("data/crate.bmp")))
{
/* Set the status to true */
Status = TRUE;
/* Create The Texture */
glGenTextures(3, &texture[0]);
/* Load in texture 1 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture(GL_TEXTURE_2D, texture[0]);
/* Generate The Texture */
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
TextureImage[0]->h, 0, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels);
/* Nearest Filtering */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_NEAREST);
/* Load in texture 2 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture(GL_TEXTURE_2D, texture[1]);
/* Linear Filtering */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
/* Generate The Texture */
glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->w,
TextureImage[0]->h, 0, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels);
/* Load in texture 3 */
/* Typical Texture Generation Using Data From The Bitmap */
glBindTexture(GL_TEXTURE_2D, texture[2]);
/* Mipmapped Filtering */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,
GL_LINEAR_MIPMAP_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,
GL_LINEAR);
/* Generate The MipMapped Texture (NEW) */
gluBuild2DMipmaps(GL_TEXTURE_2D, 3, TextureImage[0]->w,
TextureImage[0]->h, GL_BGR,
GL_UNSIGNED_BYTE, TextureImage[0]->pixels);
}
/* Free up any memory we may have used */
if (TextureImage[0])
SDL_FreeSurface(TextureImage[0]);
return Status;
}
すべてのコメントが高く評価されています。
ご意見ありがとうございます。上記のイメージをロードする関数を参照してください。多分もっと良い見識を与えることができます。 "data/crate.bmp"私は以前にそれがうまくいくかどうかを確認するプロジェクト内のすべてのディレクトリに入れましたが、それはまだありませんでした。しかし、私もサブディレクトリなしでファイル "crate.bmp"を入れようとしましたが、これまでに働いていません。 – ThreaderSlash
IDE Eclipseでは、デバッグして実行するように求められ、イメージは表示されません。しかし、Eclipseから生成された実行可能ファイルがあるフォルダに移動し、そのファイルをクリックすると、実行され、テクスチャが表示されます。その奇妙な行動。なぜ、どのようにこれを修正するヒント?前もって感謝します。 – ThreaderSlash
ここで問題となるのは、プロジェクトのディレクトリツリーの周囲にテクスチャを散らばっていることは、直接的なアプローチではないということです。'char * buf;を追加してください。 puts(buf = getcwd(NULL、0));あなたのプログラムの始めに、起動時にどのディレクトリが作業ディレクトリであるかを見るためにfree(buf); – datenwolf