テクスチャが問題なく読み込まれていることは確かですが、レンダリングできません!
GL_TEXTURE_2D
GLを初期化するときに有効にします。次に、この関数を使用してテクスチャをロードします。
GLuint loadTexture(std::string filepath)
{
SDL_Surface *image;
if ( image = SDL_LoadBMP( filepath.c_str() ) )
{
GLuint tex_id;
glGenTextures( 1, &tex_id );
glBindTexture( GL_TEXTURE_2D, tex_id );
glTexImage2D( GL_TEXTURE_2D, 0, 3, image->w,
image->h, 0, GL_RGB,
GL_UNSIGNED_BYTE, image->pixels );
SDL_FreeSurface(image);
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
textures.emplace(getFilename(filepath), tex_id);
glBindTexture(GL_TEXTURE_2D, 0);
return tex_id;
}
else
{
// std::cout << "[!!] Could not open " << filepath << "! \n";
return -1;
}
}
テクスチャが読み込まれ、ファイル名をキーとしてテクスチャ名がマップに配置されます。マップは、として定義されたグローバルstd::map <std::string, GLuint> textures
です。マップを反復処理して、GL が適切にテクスチャ名を割り当てていることを確認できます。最後に、クワッドを次のように描画します。
glBindTexture(GL_TEXTURE_2D, textures["MY_IMAGE.BMP"]);
glBegin(GL_QUADS);
glTexCoord2f(0.0, 0.0);
glVertex3d(0.0, 0.0, iNode->verticies[1]);
glTexCoord2f(1.0, 0.0);
glVertex3d(1.0, 0.0, iNode->verticies[2]);
glTexCoord2f(1.0, 1.0);
glVertex3d(1.0, 1.0, iNode->verticies[3]);
glTexCoord2f(0.0, 1.0);
glVertex3d(0.0, 1.0, iNode->verticies[4]);
glEnd();
注目に値するいくつかのこと:
- これらのクワッドの色は、描画前に定義されています。format のすべての色定義をコメントアウトすると
glColor3ub(r, g, b)
、クワッドは黒でレンダリングされます。 - を呼び出すと
glIsTexture(textures["MY_IMAGE.BMP"])
、false が返されます。 - テクスチャ名は引き続きマップに適切に保存されます。
- OpenGL 2.1 を使用しています。
テクスチャは何らかの形で内部的に削除されていますか? レンダリングに何か問題がありますか?
必要に応じて、より多くのコードを提供します。
編集:
私は何をしたかわかりません...今、私のレンダリングは次のようになります: