2012-01-27 7 views
0

RenderクラスにshowMainMenu()というメソッドがあります。 では、私はビットマップ私がレンダリングの私のctorのでOpenGLはメソッド内にロードされたテクスチャのみを表示しますか?

Bitmap* bBall; 
Bitmap* bWall; 
Bitmap* bStart; 
Bitmap* bEnd; 
Bitmap* bHighscores; 
Bitmap* bHelp; 
Bitmap* bStar; 

としての私のテクスチャを定義したレンダリング:私は次のようにテクスチャをバインド)showMainMenuで

this->bBall = new Bitmap("ball.bmp"); 
this->bEnd = new Bitmap("beenden.bmp"); 
this->bStart = new Bitmap("starten.bmp"); 
this->bStar = new Bitmap("star.bmp"); 
this->bHelp = new Bitmap("hilfe.bmp"); 
this->bHighscores = new Bitmap("highscores.bmp"); 
this->bWall = new Bitmap("wall.bmp"); 

を(:

glEnable(GL_TEXTURE_2D); //Texturen aktivieren 

//draw Start button 
glBindTexture(GL_TEXTURE_2D, this->bStar->texture); 

しかし、私のディスプレイは白いままです:( 私のメソッド内でテクスチャをロードすると

Bitmap m = Bitmap("star.bmp"); 
glBindTexture(GL_TEXTURE_2D, m.texture); 

テクスチャが見えます。 1人目では働いていないのはなぜですか?

+2

ここに行く情報が少なすぎます。どこでテクスチャオブジェクトを生成しますか?テクスチャデータはどこにロードしますか?シェーダを使用しますか?その場合、サンプラをどこに送りますか?あなたの問題を示す最小限の作業例を削除してください。 – KillianDS

答えて

2

OpenGLコンテキストを作成する前に、Bitmapインスタンスを作成することをお勧めします。ビットマップファイルはロードされますが、テクスチャオブジェクトは生成されません。この修正する最も簡単な方法:あなたのためのglBindTextureを呼び出す方法bindTextureを、追加だけでファイルのデータをロードし、0にテクスチャID変数を設定するビットマップのインスタンス化すると(つまり、コンストラクタ内を)(あなたはとにかくこれを行う必要があり、それがどのようにOOPです働くことになっています)。また、テクスチャIDがゼロの場合はテストを追加し、バインドする前にIDとテクスチャを生成します。

例:

void Bitmap::bindTexture() 
{ 
    if(!textureID) { 
     glGenTextured(1, &textureID); 
     glBindTexture(GL_TEXTURE_..., textureID); 
     upload_texture_data(); 
    } else { 
     glBindTexture(GL_TEXTURE_..., textureID); 
    } 
} 

ところで:this->を経由して、クラスのメンバーにアクセスすることは悪いスタイルと考えられ、そのように行うための理由は絶対にありません。ちょっと暗黙のアップキャストは仮想の全体のポイントなので、thisポインタを基本クラスにキャストしても、その仮想メソッドは得られません。

+0

if内部にテクスチャデータをアップロードする前にバインドすることを忘れないでください。 –

関連する問題