LWJGL随机纹理失真

时间:2015-08-12 08:05:30

标签: java opengl lwjgl

最近我对LWJGL纹理的渲染有一个非常奇怪的问题。有时当玩家四处走动时,我会得到这样的错误(在草地砖上):

enter image description here

其他时候,当我在移动时,或者当我只是静止不动时,这是正常的:

enter image description here

这是我的纹理渲染代码:

public static void drawQuad(Texture texture, float x, float y, float width, float height)
{
    texture.bind();
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST);
    GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);
    GL11.glTranslatef(x, y, 0);
    GL11.glBegin(GL11.GL_QUADS);
    GL11.glTexCoord2f(0, 0);
    GL11.glVertex2f(0, 0);
    GL11.glTexCoord2f(1, 0);
    GL11.glVertex2f(width, 0);
    GL11.glTexCoord2f(1, 1);
    GL11.glVertex2f(width, height);
    GL11.glTexCoord2f(0, 1);
    GL11.glVertex2f(0, height);
    GL11.glEnd();
    GL11.glLoadIdentity();
}

所有的牌都是64x64(所以它是^ 2)。我完全不知所措。

1 个答案:

答案 0 :(得分:1)

看起来纹理坐标正在环绕(使用GL_REPEAT环绕模式),因此如果纹理坐标从底部边缘略微超过,它会对顶部(绿色)进行采样。

尝试添加此内容:

GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE);
GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE);