1

私はとても愚かだと感じています...これを投稿した直後に私はそれを解決しました...どういうわけか私はテクスチャの値としてメモリアドレスを取得することができました。静的な値ではなく、参照として送信するのをやめることにしました(これに関するコメントはありますか?)。

参照として返送する唯一の場所は、SDLからテクスチャに変換した後です。おそらくここでも必要ありません。それについての考えは素晴らしいでしょう!

他の誰かが私と同じ問題を抱えている場合は、この下に元の投稿を残します。


*解決済み*

したがって、これは、テクスチャをバインドするまで機能するため、クラックする必要があります。私はそれに行きます。

最初に、SDLを使用して画像をロードし、テクスチャに変換します。変換コードは、次のとおりです。http: //content.gpwiki.org/index.php/SDL:Tutorials: Using_SDL_with_OpenGL(link so i donあまり入力しないでください)。initコードも同じです。

テクスチャがロードされると、次のようにマップに保存されます。

機能:

GLuint& Loader::loadTex(const string name)

コード:

//Check if the text is already loaded, if it is return it
map<string, GLuint&>::const_iterator it = m_loadedTextures.find(name);
if(it != m_loadedTextures.end())
{
    return it->second;
}

SDL_Surface* surface = NULL;

//Load the file
string loadPath =  m_prePath + name;
surface = lEntity.loadImage(loadPath.c_str(), true);

if(surface == NULL)
{
    //load default texture?
}

//convert the SDL_Surface to a texture
GLuint newTexture = lEntity.glEntity.GetTextureFromSurface(surface);
GLenum h = glGetError();


//free the surface
SDL_FreeSurface(surface);

//add to map
m_loadedTextures.insert(pair<string, GLuint&>(name, newTexture));

return newTexture;

したがって、テクスチャを受け取った後、次のように描画しようとします。

機能:

bool OpenGlEntity::renderOpenGl(int x, int y, int w, int h, GLuint& image, SDL_Rect& clip)

コード:

GLuint texture = image;

// Bind the texture to which subsequent calls refer to
glBindTexture( GL_TEXTURE_2D, texture );

glBegin( GL_QUADS );
    //Bottom-left vertex (corner)
    glTexCoord2i( 0, 0 );
    glVertex3f( 100.f, 100.f, 0.0f );

    //Bottom-right vertex (corner)
    glTexCoord2i( 1, 0 );
    glVertex3f( 228.f, 100.f, 0.f );

    //Top-right vertex (corner)
    glTexCoord2i( 1, 1 );
    glVertex3f( 228.f, 228.f, 0.f );

    //Top-left vertex (corner)
    glTexCoord2i( 0, 1 );
    glVertex3f( 100.f, 228.f, 0.f );
glEnd();

ここで重要なのは、描画時にテクスチャをバインドしない場合、最後にバインドされたテクスチャ(リンクした変換コードでバインドされている)が表示されることです。ただし、テクスチャをバインドすると、代わりに白いBGが表示されます。

バインドされたテクスチャがおそらく何らかの形で破損していることに気付きましたが、どうやって!?私はこれを追跡することができないようで、昨日からそれを使って作業しました。

助けてくれてありがとう。御時間ありがとうございます。

4

1 に答える 1

0

私はとてもばかげているように感じます...これを投稿した直後に解決しました...どういうわけか、テクスチャの値としてメモリアドレスを取得することができました。参照として、静的な値の代わりに送信するのをやめることにしました (これに関するコメントはありますか?)。

参照として送り返す唯一の場所は、SDL からテクスチャに変換した後です。ここでも必要ないかもしれません。それについての考えは素晴らしいでしょう!

他の誰かが私と同じ問題を抱えている場合は、元の投稿を残します。

于 2013-01-10T20:48:07.063 に答える