2016-05-14 17 views
3

私はFreeImageを使ってC++でイメージを表示しようとしていましたが、これを行う上で多くの問題を抱えていました。読み込み機能が画像を読み込んでいるようですが、画像を束縛しているようです。OpenGLでテクスチャを読み込んで表示するには

GLuint Load(){ 
string imgdir = "Path to my file"; 
FREE_IMAGE_FORMAT fif = FreeImage_GetFIFFromFilename(imgdir.c_str()); 
FIBITMAP *bitmap = FreeImage_Load(fif,imgdir.c_str(),0); 
int height, width; 
height = FreeImage_GetHeight(bitmap); 
width = FreeImage_GetWidth(bitmap); 
GLuint textureid; 
glGenTextures(1, &textureid); 
glBindTexture(GL_TEXTURE_2D, textureid); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); 
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); 
glTexImage2D(GL_TEXTURE_2D, 0,GL_RGBA, width, height, 0, GL_RGBA,  GL_UNSIGNED_BYTE, bitmap); 
FreeImage_Unload(bitmap); 
return textureid;} 

void Square(){ 
glBindTexture(GL_TEXTURE_2D, tex); 
glBegin(GL_QUADS); 
glTexCoord2f(0.0, 0.0);glVertex3f(0.0, 0.0, 0.0); 
glTexCoord2f(1.0, 0.0);glVertex3f(3.0, 0.0, 0.0); 
glTexCoord2f(1.0, 1.0);glVertex3f(3.0, 5.0, 0.0); 
glTexCoord2f(0.0, 1.0);glVertex3f(0.0, 5.0, 0.0); 
glEnd();} 

私は取得しています。このすべてがちょうど白い長方形である使用:ここで は私がこれまで持っているものです。正しい方向の任意の点が評価されます。

答えて

2

ビットを渡すのではなく、フリーイメージオブジェクトを渡しています。あなたは、実際のビットを取得するには、このようなものを使用することがあります。

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA8, width, height, 
0, GL_BGRA, GL_UNSIGNED_BYTE, (void*)FreeImage_GetBits(bitmap)); 

は、入力画像のフォーマットはRGBAと一致することを確認します。

+0

何らかの理由で、まだ動作していないようです。修正できる他のものがありますか?ご協力いただきありがとうございます。 – user11046

+1

使用している画像フォーマットは何ですか?異なるフラグが必要な場合があります。幅、高さなどの情報を印刷して、イメージがFreeImageによって正しく読み込まれていることを確認することもできます。 –

+0

jpegを使用しています。正確な高さと幅を示しています。以前に読み込んだ後に画像を新しいものとして保存することでテストしましたので、正常に動作しているようです。 – user11046

関連する問題