1

これが問題です。ビューポート全体に塗りつぶされた背景として画像をロードしたいと思います。この背景は、カメラがどこを向いていても、常にカメラを向いている必要があります。まず、当然、背景としてテクスチャを使用すると思います。私のコードは次のとおりです。

glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0,1,0,1,0,1);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();

glBindTexture(GL_TEXTURE_2D, myimage.GetID());
glEnable(GL_TEXTURE_2D);

glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex2f(0, 0);
glTexCoord2f(1, 0); glVertex2f(1, 0);
glTexCoord2f(1, 1); glVertex2f(1, 1);
glTexCoord2f(0, 1); glVertex2f(0, 1);
glEnd();

glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glDisable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, 0);

私を信じてください、myimageは写真をテクスチャにロードできるCIMAGEクラスであり、うまく機能します。ただし、何らかの理由で、私のアプリケーションはテクスチャを長方形にロードできません。(この問題については、ここをクリックして説明しました)その結果、ビューポートの周囲に長方形のフレームしか表示されません。

だから、私は別の解決策を考え出します。

テクスチャの代わりにglDrawPixelsを使用します。私のコードは以下の通りです:

glRasterPos2i(0, 0);
glDrawPixels(myimage.GetWidth(), myimage.GetHeight(), (myimage.GetBPP() == 24)?GL_RGB:GL_RGBA, GL_UNSIGNED_BYTE, 
    myimage.GetData());

写真が登場!しかし、写真はいつも私のカメラに向いているとは限りませんでした。特定の方向にのみ表示されます。シーン内のオブジェクトのように、背景が常にカメラに面しているわけではありません。

では、glDrawPixelsを使用して背景を実装する方法を知っている人はいますか?

ちなみに、この背景は3Dシーンに配置されたオブジェクトではないと思います。したがって、看板は私の解決策ではないかもしれません。この場合も、この背景はビューポート全体を塗りつぶし、常にカメラに面しています。

4

1 に答える 1

4

テクスチャの読み込みが機能しない理由の 1 つは、2 のべき乗の次元がない可能性があるためです。正方形の 256x256 テクスチャ (など) を試して、これが問題かどうかを確認してください。Rectangle Texturesの詳細については、こちらを参照してください。

バックグラウンドの問題に戻ります-これを行う正しい方法は、

  1. 画面全体を埋める正投影/ビューポートを設定します。

    glViewport(0,0,nw,nh);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0,1,0,1,0,1);
    glMatrixMode(GL_MODELVIEW);
    
  2. 深度テストを無効にする

  3. ロードしたテクスチャ/テクスチャ長方形でフルスクリーン クワッドを描画します。

    glBegin(GL_QUADS);
    glVertex2f(0,0);
    glVertex2f(1,0);
    glVertex2f(1,1);
    glVertex2f(0,1);
    glEnd();
    
  4. 通常の投影/モデルビューを設定して続行します。

お役に立てれば!

于 2012-05-22T14:08:21.043 に答える