我正在用 Java 编写一个游戏,它使用 LWJGL 的本机 OpenGL 绑定在 OpenGL 中渲染游戏图形。当我在 Linux 上运行游戏时(在 2 台具有不同显卡的不同计算机上测试),一切正常。但是,当我在 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();
此代码应填满整个宽度。
另一个有趣的事实是,如果您仔细观察,您应该能够在白条所在的地方看到地形顶部的平滑线带。这个白条问题以某种方式移除了作为地形一部分的黑线,但没有移除抗锯齿顶部的线。
我尝试在渲染地形时打开和关闭混合,两种情况下都出现了同样的问题。
有谁知道我该如何解决这个问题,或者为什么它只发生在 Windows 上?