フル解像度のテクスチャを同じ解像度のウィンドウに描画するにはどうすればよいですか?


8

画像は1280x800、画面サイズは1280x800です。それは完全に描画する必要があります。画面サイズのクワッドを作成し、クワッドに合うようにテクスチャを設定しています。しかし、現在のところ、画面の左上隅に四角形のテクスチャが描画されています。これは、スケール外で十分な大きさではありません。

なぜ機能しないのかわかりません。描画するときにテクスチャのサイズを大きくしてみましたが、ある程度機能するようですが、描画するときに機能しないのはなぜですか。 1280x800クワッド。

フルスクリーンのクワッドを作成するにはどうすればよいですか?

これが私が現在やっている方法です:

これは私のOPENGLとディスプレイのセットアップコードです。

    DisplayMode displayMode = null;
    DisplayMode[] modes = Display.getAvailableDisplayModes();

    for (int i = 0; i < modes.length; i++) {
        if (modes[i].getWidth() == World.SCREEN_WIDTH && modes[i].getHeight() == World.SCREEN_HEIGHT && modes[i].isFullscreenCapable()) {
            displayMode = modes[i];
        }
    }

    Display.setDisplayMode(displayMode);
    Display.setFullscreen(false);
    Display.create();

    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, World.SCREEN_WIDTH, World.SCREEN_HEIGHT, 0, 1, -1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);

これは、テクスチャ付きクワッドを描画するための私のコードです。

    background = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/background.png")));

    glBindTexture(GL_TEXTURE_2D, background.getTextureID());
    glPushMatrix();
    glBegin(GL_QUADS);
    glTexCoord2f(0, 0);
    glVertex2f(0, 0); // Upper left

    glTexCoord2f(1, 0);
    glVertex2f(World.SCREEN_WIDTH, 0); // Upper right

    glTexCoord2f(1, 1);
    glVertex2f(World.SCREEN_WIDTH, World.SCREEN_HEIGHT); // Lower right

    glTexCoord2f(0, 1);
    glVertex2f(0, World.SCREEN_HEIGHT); // Lower left
    glEnd();
    glPopMatrix();

Slick2Dのようなサウンドは、2の累乗サイズのテクスチャを作成します。slick.ninjacave.com/forum/viewtopic.php?p=26076を
msell

@msellでは、どうすれば1280x800画面をカバーできますか?
Louis Hong

2
これはあなたにとって本当の問題かもしれませんが、これは「コードをデバッグする」タイプの質問に似ているようで、スタック交換のQ / Aスタイルには適合しません。
Katu 2013

実際にはそうではありません。これは本当のLWJGL問題です。質問に対する答えを持っています。しかし、私は、高ランクの人は周りのうち、実際にコンテンツ@Katuを見て票を下に与えるどのようになる嫌い
ルイ香港を

1
使用されるtexcoordsはテクスチャを引き伸ばすか、または絞って画面いっぱいに配置するため、2のべき乗のサイズは重要ではありません。より可能性が高いのは、モデルビューマトリックスが恒等ではないことです。
Maximus Minimus 2013

回答:


5

考えられる原因は、フルスクリーンのクワッドを描画するときに、モデルビューマトリックスにIDがない可能性があります。これは、クワッドの前に何か他のものを描画している場合に発生する可能性があります。

セットアップコードから、マトリックスモードをGL_MODELVIEWに正しく切り替えることに注意してください。ただし、そうした後は、glLoadIdentityを呼び出さないようにしています(これは、最初はIDであるはずなので問題ありませんが、始めるのはよい習慣です)。

クワッドを描画するときは、glPushMatrix / glPopMatrix呼び出しで囲まれています。これだけでは、マトリックスアイデンティティを作成するのに十分ではありません。仕様から:

glPushMatrixは、現在のマトリックススタックを1つ押し下げ、現在のマトリックスを複製します。つまり、glPushMatrix呼び出しの後、スタックの上のマトリックスその下のマトリックスと同じです

(私の強調)

言い換えると、以前のモデルビューマトリックスが恒等でなかった場合、glPushMatrix呼び出しに続く新しいモデルビューマトリックスも恒等ではありません。

最も簡単な修正は、glPushMatrix呼び出しの後にglLoadIdentityを追加することです。


これは非常に複雑です。マトリックスはどのように機能しますか?
ルイ香港

1
あなたはそのためのいくつかのチュートリアル資料を探すべきです-それはこのサイトにとって非常に話題外です。
Maximus Minimus 2013
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.