在OpenGL中绘制相邻纹理映射矩形

时间:2011-05-10 11:49:13

标签: opengl textures texture-mapping

我正在绘制一些纹理映射的矩形,它们使用以下代码相互叠加:

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调整其大小时,在一些矩形之间会出现单像素间隙。

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

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

3 个答案:

答案 0 :(得分:1)

纹理如何?也许你要使用不同的夹紧模式,具体取决于纹理的内容。

答案 1 :(得分:1)

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

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

答案 2 :(得分:1)

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

原始的“全尺寸”渲染已经调整了纹理大小,并且它是一个纯粹的侥幸,调整工件大小导致透明行在这种情况下不显示。

然后当我用glScale再次调整整个批次时,一些工件必须消失,透明像素显示为间隙。