LWJGL 随机纹理失真
LWJGL random texture distortion
最近我在渲染 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)。我完全莫名其妙。
看起来纹理坐标正在环绕(使用 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);
最近我在渲染 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)。我完全莫名其妙。
看起来纹理坐标正在环绕(使用 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);