2

次のコードは、次の画像を生成します。背景に使用している画像は、displayModeと同様に640x480です。テクスチャの背景は.bmpであり、Slickテクスチャローダーでロードされます。なぜそれがクワッドを埋めていないのか、なぜそれが反映されているのか混乱しています。編集:私のOpenGLシーンの背景はピンクで、表示される黒は作成されたクワッドのものです。背景画像は、「テスト」が貼られた2pxの水色の境界線が付いた緑色のブロックです。

private void renderBackground(){
    float w = displayMode.getHeight()/2;
    float h = displayMode.getWidth()/2;

    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glPushMatrix();

    GL11.glLoadIdentity();
    GLU.gluOrtho2D(-w, w, -h, h);

    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPushMatrix();

    GL11.glLoadIdentity();      
    GL11.glDisable(GL11.GL_DEPTH_TEST);

    if(useTextures)background.bind();
    GL11.glBegin(GL11.GL_QUADS);

    GL11.glTexCoord2f(0.0f, 0.0f);
    GL11.glVertex2f(-w,-h);

    GL11.glTexCoord2f(1.0f, 0.0f);
    GL11.glVertex2f(w,-h);

    GL11.glTexCoord2f(1.0f, 1.0f);
    GL11.glVertex2f(w, h);

    GL11.glTexCoord2f(0.0f, 1.0f);
    GL11.glVertex2f(-w, h);

    GL11.glEnd();

    GL11.glEnable(GL11.GL_DEPTH_TEST);
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glPopMatrix();
    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glPopMatrix();
}

OpenGLテクスチャのミスマッピング

追加GL11.glTranslatef(20.0f, 20.0f, 0.0f);すると、ピンクが表示されます。これは、私の「initGL」メソッドで作成された色です。 GL11.glClearColor(1.0f, 0.75f, 0.796f, 0.0f);ここに画像の説明を入力してください

GL_PROJECTIONには、プッシュする前に次のものが含まれています。renderBackground()が呼び出されても、GL_MODELVIEWは変更されません。

    GL11.glMatrixMode(GL11.GL_PROJECTION); // Select The Projection Matrix
    GL11.glLoadIdentity(); // Reset The Projection Matrix

    // Calculate The Aspect Ratio Of The Window
    GLU.gluPerspective(45.0f, (float) displayMode.getWidth() / (float) displayMode.getHeight(), 0.1f, 25.0f);
    //position camera
    GLU.gluLookAt(5.0f, 3.0f, -5.0f, 0.0f, 0.0f, -10.0f, 0.0f, 1.0f, 0.0f);
    GL11.glMatrixMode(GL11.GL_MODELVIEW); // Select The Modelview Matrix
4

2 に答える 2

3

問題を特定するためにさらに情報が必要ですが、ここにいくつかの可能性のあるリストがあります。

1)2の累乗以外のテクスチャをサポートしていない古いビデオカードを使用しています。ライブラリを使用してテクスチャをロードしているため、おそらくそれを検出し、2の累乗の画像を作成し、黒で塗りつぶしています。 。

2)あなた(または使用しているライブラリ)がテクスチャマトリックススタックのマトリックスを変更し、テクスチャ座標を変更しています。

3)テクスチャをロードするとき(またはライブラリを呼び出してロードするとき)に何か問題が発生しています。

私が最初にチェックするのは、ビデオカードが2拡張のパワー以外のテクスチャをサポートしているかどうかです。あなたは実行時にそれをチェックすることができます、openGL /カードが2の累乗以外をサポートするかどうかを検出する方法を見てください?

于 2011-05-10T03:19:04.410 に答える
0

私が最初に見るのは、あなたが計算することです

float w = displayMode.getHeight()/2;
float h = displayMode.getWidth()/2;

切り替えましたか?

第二に、ローダーがテクスチャを反転させたため、テクスチャが反転する可能性があります(私が正しく覚えているとき、これは特にBMPで発生しました)。

于 2011-05-10T06:43:39.767 に答える