lwjgl 2d渲染两个纹理之间的冲突

时间:2014-02-14 03:07:28

标签: java opengl textures rendering lwjgl

好的,所以我目前正在使用LWJGL在java上进行2D游戏。我对java及其工作原理有相当深入的了解,并且了解游戏的工作原理和LWJGL / openGL,但是我在渲染纹理方面遇到了这个非常奇怪的问题。我确定我的一种绘制方法是罪魁祸首..

public static void texturedTriangleInverted(float x, float y, float width, float height, Texture texture) {
    GL11.glPushMatrix();
        {

            GL11.glTranslatef(x, y, 0);
            texture.bind();

            GL11.glBegin(GL11.GL_TRIANGLES);
                {
                    GL11.glVertex2f(width / 2, 0);
                    GL11.glTexCoord2f(width / 2, 0);

                    GL11.glVertex2f(0, height);
                    GL11.glTexCoord2f(0, 1);

                    GL11.glVertex2f(width, height);
                    GL11.glTexCoord2f(1, 1);
                }
            GL11.glEnd();
        }
    GL11.glPopMatrix();
}

所以会发生的事情是,如果我用这个方法渲染任何东西,渲染的下一个东西看起来就像在一端被压缩并在另一端被拉伸,即使渲染的下一个东西没有用这个方法渲染。我几乎肯定它与我传递给Gl11.glTexCoord2f(float x, float y)方法的论点有关,但我无法弄清楚如何修复它。

这是我的openGL初始化代码

private void initGL() {
    GL11.glMatrixMode(GL11.GL_PROJECTION);
    GL11.glLoadIdentity();
    GL11.glOrtho(0, Strings.DISPLAY_WIDTH, 0, Strings.DISPLAY_HEIGHT, -1, 1);

    GL11.glMatrixMode(GL11.GL_MODELVIEW);
    GL11.glEnable(GL11.GL_TEXTURE_2D);
    GL11.glEnable(GL11.GL_TEXTURE_BINDING_2D);
    GL11.glViewport(0, 0, Strings.DISPLAY_WIDTH, Strings.DISPLAY_HEIGHT);
    GL11.glClearColor(0, 0, 1, 0);
    GL11.glDisable(GL11.GL_DEPTH_TEST);

}

我的游戏循环代码

    private void gameLoop() {
    while (!Display.isCloseRequested()) {

        GL11.glClear(GL11.GL_COLOR_BUFFER_BIT);
        GL11.glLoadIdentity();
        GL11.glTranslatef(Strings.transX, Strings.transY, 0);

        this.level.update();
        this.level.render();

        Display.update();
        Display.sync(Strings.FPS_CAP);
    }

    Keyboard.destroy();
    Display.destroy();

}

我的纹理加载代码(注意我使用光滑来加载我的纹理)

public static final Texture loadTexture(String location) {
    try {
        if (textureExists(location)) {
            return TextureLoader.getTexture("png", new BufferedInputStream(new FileInputStream(new File(location))), false);
        } else {
            System.err.println("txture does not exist");
        }

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

    return null;
}

1 个答案:

答案 0 :(得分:0)

您需要在glTexCoord引用之前指定glVertex,而不是之后。这与glColorglNormal相同,glVertex使用您设置的最后一个属性。