代码之家  ›  专栏  ›  技术社区  ›  Ned Bingham

在GLSL中重复手动总账

  •  2
  • Ned Bingham  · 技术社区  · 15 年前

    目前,我有一个纹理图集,是2048x 2048像素与三个512x 512纹理存储设置,我只应用一个纹理的对象。因此,我使用以下代码将纹理坐标(从0到1)定位到该纹理在纹理图集上的正确位置:

    color = texture2D(tex_0, vec2(0.0, 1024.0/2048.0) + mod(texture_coordinate*vec2(40.0), vec2(1.0))*vec2(512.0/2048.0));
    

    问题是当我应用这个时,纹理周围有一个黑色的边框。我认为这是因为OpenGL不能在边界处混合两个像素。

    那我该怎么摆脱边境呢?

    编辑* 我已经试过将开始和结束边界移向纹理的中心,但这不起作用。

    编辑* 我找到了问题的根源,自动mipmap生成是将纹理图集中的纹理混合在一起。这意味着我必须编写自己的mipmapping函数。(据我所知)

    如果有更好的主意,请发邮件。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ned Bingham    14 年前

    我使用了 GL_2D_TEXTURE_ARRAY 创建正确映射并正确重复的三维纹理的功能。这样纹理就不会在较高的mipmap级别上混合在一起。