1

我正在使用以下代码绘制许多纹理映射的矩形,它们彼此重叠:

glBegin(GL_QUADS);
glTexCoord2f(0.0, 1.0); glVertex3f(x, y, 0);
glTexCoord2f(0.0, 0.0); glVertex3f(x, y + dy, 0);
glTexCoord2f(1.0, 0.0); glVertex3f(x + dx, y + dy, 0);
glTexCoord2f(1.0, 1.0); glVertex3f(x + dx, y, 0);
glEnd();

这会以全尺寸正确呈现,但是当我用 调整它的大小时glScale,一些矩形之间会出现单像素间隙。

但是,如果我删除纹理贴图,矩形总是正确地相互邻接。

出了什么问题,我该如何解决?

4

3 回答 3

1

质感如何?也许您必须使用不同的夹紧模式,具体取决于纹理的内容。

于 2011-05-10T12:16:37.980 回答
1

首先,通过不使用任何 alpha 通道(假设你是)并选择像拇指酸痛一样突出的背景颜色,确保它们确实是间隙,而不是纹理伪影。

即使您将纹理确定为根本原因,更可能的罪魁祸首是顶点坐标中的舍入误差。仅当使用的顶点坐标匹配 100% 时,才能保证相邻三角形的光栅化是无间隙的。与其动态计算它们(x + dx, y + dy),为什么不将它们存储在一个数组中并确保重复使用相同的坐标呢?

于 2011-05-10T13:41:46.160 回答
1

我是个白痴。我使用的图像实际上在顶部和底部有一行透明的像素。

最初的“全尺寸”渲染已经在调整纹理大小,在这种情况下,调整大小的伪影导致透明行不显示纯属侥幸。

然后,当我再次使用 glScale 重新调整整个区域的大小时,一些伪影一定已经消失了,透明像素显示为间隙。

于 2011-05-10T15:03:38.137 回答