簡體   English   中英

無法在LWJGL中繪制1280x800紋理

[英]Can't draw 1280x800 texture in LWJGL

我的圖片是1280x800,屏幕尺寸是1280x800。 它應該完美繪制。 但是現在它在屏幕的左上角繪制了一個方形的紋理,該紋理不合比例且不夠大。 我不知道為什么它不起作用,我嘗試在繪制時將紋理的大小寫得更大,並且似乎可以排序,但是我不知道為什么在1280x800的四邊形上繪制時它不起作用。

在此處輸入圖片說明

這是我的OPENGL並顯示設置代碼:

    try {

        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();

    } catch (LWJGLException e) {
        e.printStackTrace();
    }

    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")));
    girl_01 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_01.png")));
    girl_02 = TextureLoader.getTexture("PNG", new FileInputStream(new File("res/menu/girl_02.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();

編輯:搜索了幾個小時后,我發現,我認為這是一個怪異的解決方案,我將圖像制作為2048x1024,並留出了多余的空白。 有效。 但是這應該如何工作? 因此,我想使所有圖像大小的冪為2,而使多余的空間為空白? 或者,還有更好的方法?

這里確實沒有足夠的信息,但是我懷疑您有一個非常老的OpenGL實現(2.0之前的版本)。

較早版本的OpenGL無法使用非二次冪紋理。 您必須在加載之前重新縮放(拉伸以適合)圖像,或者在調整大小和修改紋理坐標后將圖像的一部分留為空白。

如果您具有合法的OpenGL 2.0實現,它將支持非二次冪紋理。 早在OpenGL 2.0時代,驅動程序供應商並不十分符合要求 ,並且通常會聲稱無論主機硬件是否真正滿足所有要求都實現了OpenGL版本。 非二次冪紋理可能是最大的違規問題,該時代的許多硬件都可以處理OpenGL 2.0所需的一切,除了NPOT紋理。

無論如何,如果您使用的平台不能保證OpenGL 2.0,則應在使用npot紋理之前檢查擴展名GL_ARB_texture_non_power_of_two

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM