Java 在Windows上使用LWJGL时会出现奇怪的竖条

Java 在Windows上使用LWJGL时会出现奇怪的竖条,java,windows,opengl,graphics,lwjgl,Java,Windows,Opengl,Graphics,Lwjgl,我正在用java编写一个游戏,它使用LWJGL的原生OpenGL绑定在OpenGL中呈现游戏图形。当我在Linux上运行游戏时(在两台不同的计算机上使用不同的图形卡进行测试),一切正常。然而,当我在Windows上运行游戏时,屏幕上会出现奇怪的1像素宽的垂直条 下面是问题的图片: 我在三台不同的Windows电脑上用不同的显卡尝试了这个方法,所有这些电脑都有最新的驱动程序 有趣的是,每次我运行程序时,这些条都会出现在完全相同的位置,尽管每次生成的地形都不同 我不明白为什么会出现这些竖条。我用来

我正在用java编写一个游戏,它使用LWJGL的原生OpenGL绑定在OpenGL中呈现游戏图形。当我在Linux上运行游戏时(在两台不同的计算机上使用不同的图形卡进行测试),一切正常。然而,当我在Windows上运行游戏时,屏幕上会出现奇怪的1像素宽的垂直条

下面是问题的图片:

我在三台不同的Windows电脑上用不同的显卡尝试了这个方法,所有这些电脑都有最新的驱动程序

有趣的是,每次我运行程序时,这些条都会出现在完全相同的位置,尽管每次生成的地形都不同

我不明白为什么会出现这些竖条。我用来渲染地形的代码是

glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

// draw the terrain
glDisable(GL_BLEND);
glDisable(GL_LINE_SMOOTH);
glColor3f(0F, 0F, 0F);
glBegin(GL_LINES);
for (int x = 0; x < Constants.NUM_WIDE; x++) {
    glVertex2i(x, 0);
    glVertex2i(x, originalHeightMap[x]);
}
glEnd();

//draw a smooth line strip on top of the terrain to anti-alias it
glEnable(GL_BLEND);
glEnable(GL_LINE_SMOOTH);
glBegin(GL_LINE_STRIP);
for (int x = 0; x < Constants.NUM_WIDE; x++) {
    glVertex2i(x, originalHeightMap[x]);
}
glEnd();
glHint(GL\u线\u平滑\u提示,GL\u最好);
glBlendFunc(GL_SRC_ALPHA,GL_ONE_减去GL_SRC_ALPHA);
//绘制地形图
glDisable(GLU混合);
glDisable(GLU线条平滑);
GL3F(0F,0F,0F);
glBegin(GL_行);
对于(int x=0;x
此代码应填充整个宽度

另一个有趣的事实是,如果你仔细看,你应该能够看到平滑的线条带在地形顶部的地方,白色的酒吧。这个白条问题以某种方式删除了作为地形一部分的黑线,但没有删除消除顶部锯齿的线

我尝试在渲染地形时打开和关闭混合,这两种情况下都会出现相同的问题


有人知道我如何解决这个问题,或者为什么它只出现在windows上吗?

绘制此图时使用什么投影和模型视图矩阵?对我来说,这看起来像是一些不精确的映射。请注意,当您使用glOrtho(0.0,宽度,…)之类的工具时,水平像素中心位于0.5,1.5,…,宽度-1.5,宽度-0.5,而不是整数值处。@derhass我从glMatrixMode(GL_投影)开始设置OpenGL;glLoadIdentity();glOrtho(0,Constants.NUM_宽,0,Constants.NUM_高,1,-1);glMatrixMode(GLU模型视图);其中Constants.NUM_WIDE和NUM_HIGH是我的显示画布的大小。这似乎正是我的观点。您不是在像素中心绘制(除非您是通过MODELVIEW校正偏移)。但在这种情况下,线条应该在像素中心绘制。可能是windows机器在驱动程序中启用了MSAA,所以很可能会出现这种效果,但也可能是一些数值不稳定,因为您正在精确地绘制像素边界。@derhass我似乎已经用简单的GL_TRIANGLE_STRIP绘制的愚蠢技巧修复了它,但是你有没有建议我如何设置OpenGL的修复方法,这样就不会出现问题?只需尝试上面的线条绘制代码,但将投影矩阵更改为glOrtho(-0.5,(GLfloat)Constants.NUM_WIDE-0.5f,…);