我遇到了一个问题,即两个对象之间的连接处偶尔会出现一个像素孔,这些对象具有相同的一组顶点,但被转换为彼此相邻。我设法用一行简单的正方形重现了这一点。
正方形为 1 x 1 单位,中心为 0,0。我在一行中放置了一些这样的正方形,使用 glTranslatef 将每个正方形移动到位(在这种情况下,我提供的值始终是整数)。我发现当相机位于某些位置时,OpenGL 在这些正方形之间留下一个像素间隙,通过它我可以看到后面的任何内容(例如,我清除后台缓冲区的颜色)。将正方形顶点更改为角落中的 0,0 并不能解决问题。
示例代码:
glPushMatrix();
glTranslatef(0, 0, 0);
drawSquare();
glPopMatrix();
glPushMatrix();
glTranslatef(0, 0, 1);
drawSquare();
glPopMatrix();
glPushMatrix();
glTranslatef(0, 0, 2);
drawSquare();
glPopMatrix();
图像显示了这种情况。我在问题像素周围的屏幕截图中添加了一个红色圆圈。
我不知道为什么会这样,在指定最终的“世界”坐标时,消除简单正方形的每平方平移是可能的(并解决了问题),在我第一次注意到问题的地方使用更复杂的几何图形不是很实用。