【发布时间】:2011-08-09 21:50:47
【问题描述】:
我有一个 8 X 8 点的网格,想在上面叠加一个图像。我将 6 X 6 的内部网格划分为 4 个相等的子部分,每个子部分的大小为 3 X 3。让我们将此子部分称为瓷砖。我们的想法是渲染这些图块及其相应的纹理。我将网格划分为图块,因为将来我想在更大的网格上对其进行测试。 我已经使用以下方法完成了它,但我的边缘有接缝。我不知道为什么会出现接缝。
首先,图块具有相应的起始坐标为 {(0,0),(0,3),(3,0),(3,3)}。
我有一个 8 X 8 大小的图像,我想覆盖在 super_grid 上,并将其 rgba 值存储在一些 super_data(8 X 8) 中。
在渲染图块时,我将它们绘制为四边形,然后在它们上面覆盖相应的纹理。因此,如果 (a,b) 是特定图块的起始坐标,那么我初始化 四边形顶点 ={(a-0.5,b-0.5),(a+3-0.5,b-0.5),(a+3-0.5,b+3-0.5),(a-0.5,b+3-0.5 )} 如果 xs = 1/(tileWidth+1)=1/(3+1)=1/4 并且 ys =1/(tileHeight+1)=1/4,那么 纹理坐标是 {(xs/2,ys/2),(1-xs/2,ys/2),(1-xs/2,1-ys/2),(xs/2,1-ys/2 )}
所以,对于第一个图块,
quadVertices={(-0.5,-0.5),(3.5,-0.5),(3.5,3.5),(-0.5,3.5)}
textureCoords={(1/8,1/8),(1-1/8,1/8),(1-1/8,1-1/8),(1/8,1-1/8)}.
在为瓷砖传递纹理之前,我使用 super_data 初始化纹理:int image = new int [tileWidth+2] [tileHeight+2]。我们采用这些尺寸是因为瓦片纹理的某些部分与相邻瓦片重叠(这就是我们在计算 quadVertices 时考虑这部分的原因)。
最后,要生成纹理,使用
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tileWidth + 2, tileHeight + 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, image);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
上面的一切都很好,我得到了一个网格,上面覆盖了图像。但是,我的边缘有接缝。我怎样才能摆脱接缝?
【问题讨论】: