最近我对LWJGL纹理的渲染有一个非常奇怪的问题。有时当玩家四处走动时,我会得到这样的错误(在草地砖上):
其他时候,当我在移动时,或者当我只是静止不动时,这是正常的:
这是我的纹理渲染代码:
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)。我完全不知所措。
答案 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);