【问题标题】:how to map a texture onto a grid of tiles seamlessly?如何将纹理无缝映射到瓷砖网格上?
【发布时间】: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);

上面的一切都很好,我得到了一个网格,上面覆盖了图像。但是,我的边缘有接缝。我怎样才能摆脱接缝?

【问题讨论】:

    标签: opengl mapping textures


    【解决方案1】:

    你有多边形平滑吗?尝试将其关闭:

    glDisable(GL_POLYGON_SMOOTH)
    

    【讨论】:

      【解决方案2】:

      试试GL_CLAMP_TO_EDGE 而不是GL_CLAMP

      【讨论】:

        【解决方案3】:

        您需要确保同一位置(或相邻)的顶点使用精确的纹理坐标。根据世界坐标进行计算,正如你正在做的那样,应该能够处理这个问题。

        问题的第二部分是纹理本身。确保纹理在放置时正确平铺。对于重叠的瓷砖,这变得更加困难;通常,您只需确保边缘正确匹配即可。

        【讨论】:

        • 就计算而言,边缘应该正确匹配。我注意到的一件事是,如果我在计算纹理坐标时只用 xs 替换 xs/2,那么我不会得到接缝,但这不是正确的方法,因为我们正在从所有角落将原始纹理拉伸 xs/2。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-07-20
        • 1970-01-01
        • 1970-01-01
        • 2014-10-05
        • 2017-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多