4

テクスチャが問題なく読み込まれていることは確かですが、レンダリングできません!

GL_TEXTURE_2DGLを初期化するときに有効にします。次に、この関数を使用してテクスチャをロードします。

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 を使用しています。

テクスチャは何らかの形で内部的に削除されていますか? レンダリングに何か問題がありますか?

必要に応じて、より多くのコードを提供します。

編集: 私は何をしたかわかりません...今、私のレンダリングは次のようになります:ここに画像の説明を入力

4

1 に答える 1

1

SDL_LoadBMPドキュメントから:

注: 24 ビットの Windows BMP ファイルをロードする場合、ピクセル データ ポイントは青、緑、赤としてロードされますが、赤、緑、青ではありません (期待されるかもしれません)。

したがって、glTexImage2D に提供されるフォーマット パラメータは である必要がありますGL_BGR

于 2013-09-28T08:17:33.937 に答える