LWJGL纹理不会拉伸到四边形

时间:2014-08-26 02:18:08

标签: java opengl 2d lwjgl

我一直在努力让LWJGL中的纹理延伸到四边形。

以下是我用于quad的代码:

private static void renderLoad() {
    glClear(GL11.GL_COLOR_BUFFER_BIT | GL11.GL_DEPTH_BUFFER_BIT);

    texture.bind();

    glPushMatrix();{
    glBegin(GL_QUADS);
    {
        glTexCoord2f(0, 1);
        glVertex2f(0, 0); //Upper-left

        glTexCoord2f(1, 1);
        glVertex2f(Display.getWidth(), 0); //Upper-right

        glTexCoord2f(1, 0);
        glVertex2f(Display.getWidth(), Display.getHeight()); //Bottom-right

        glTexCoord2f(0, 0);
        glVertex2f(0, Display.getHeight()); //Bottom-left
    }
    glEnd();
    }glPopMatrix();
}

这是我运行时显示的样子: http://gyazo.com/376ddb0979c55226d2f63c26215a1e12

我正在尝试将图像扩展到窗口的大小。 Quad的大小与窗口大小相同,但纹理似乎没有延伸。

如果我不使用纹理,这就是它的样子,我简单地将四边形变成了一种颜色: http://gyazo.com/65f21fe3efa2d3948de69b55d5c85424

如果有帮助,这是我的主循环:

glMatrixMode(GL_PROJECTION);
        glViewport(0, 0, displaySizeX, displaySizeY);
        glLoadIdentity();
        glOrtho(0, displaySizeX, 0, displaySizeY, 1, -1);
        glMatrixMode(GL_MODELVIEW);
        glEnable(GL_TEXTURE_2D);

        texture = loadLoadingImage();

        //This is the main loop for the game.
        while(!Display.isCloseRequested()){
            delta = getDelta();
            updateFPS();
            if(Display.wasResized()){
                displaySizeX = Display.getWidth();
                displaySizeY = Display.getHeight();
                glViewport(0, 0, displaySizeX, displaySizeY);
                glMatrixMode(GL_PROJECTION);
                glLoadIdentity();
                glOrtho(0, displaySizeX, 0, displaySizeY, -1, 1);
            }
            render();
            checkInput();
            Display.update();
            Display.sync(sync);
        }

        cleanUp();
        return true;

如何将图像拉伸到四边形?

2 个答案:

答案 0 :(得分:1)

public void stretch() {
        Color.white.bind();
        texture.bind

        GL11.glBegin(GL11.GL_QUADS);
        GL11.glTexCoord2f(0,0);
        GL11.glVertex2f(100,100);
        GL11.glTexCoord2f(1,0);
        GL11.glVertex2f(100+texture.getTextureWidth(),100);
        GL11.glTexCoord2f(1,1);
        GL11.glVertex2f(100+texture.getTextureWidth(),100+character.getTextureHeight());
        GL11.glTexCoord2f(0,1);
        GL11.glVertex2f(100,100+texture.getTextureHeight());

        GL11.glEnd(); // all the 0's were originally 100 but it was off centered
    }

texture = TextureLoader.getTexture("PNG",ResourceLoader.getResourceAsStream("res/texture.png"));

尝试使用此功能。这通常是我这样做的。

答案 1 :(得分:0)

也许正在修改纹理矩阵。您可以尝试添加

glMatrixMode(GL_TEXTURE);
glLoadIdentity();

看看是否会影响任何事情。