【问题标题】:how to remove those ugly seams between patch boundaries from the texture atlas?如何从纹理图集中去除补丁边界之间的那些难看的接缝?
【发布时间】:2019-01-29 20:36:57
【问题描述】:

当我尝试使用带有 OpenTK 的 GLSL 着色器渲染带纹理的 3D 模型时,纹理块之间的接缝非常难看。有谁知道如何删除它们?

3D模型来自sketchfab.com

【问题讨论】:

标签: opengl textures seam


【解决方案1】:

从这个屏幕截图中很难判断问题是 mipmapping 还是缺少网格分割,所以我会同时回复。

可能性一:Mipmapping

确保在地图集上关闭 mipmapping。在 GL 中,这意味着您的缩小过滤器应该是线性的或最近的,但 不是 mipmapped 变体。

glBindTexture(GL_TEXTURE_2D, texAtlas);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glBindTexture(GL_TEXTURE_2D, 0);

该图集非常紧凑,标准的 mip 生成将在补丁边界上变得模糊,从而产生接缝。

可能性2:缺乏网格分割

也可能是模型被(错误地)加载为一个连续的网格,而纹理图集清楚地表明该网格应该被分解成许多块。

丑陋的接缝是由于 OpenGL 正在跨边界插入纹理坐标 (UV) 造成的,在该边界上,网格本来是不连续的。纹理图集中的每一个小“碎片”都应该对应于网格上的一个不同的补丁,并且对应于该补丁边缘的顶点不能与其他人共享,因为纹理坐标是不连续的。

一些网格格式,如常见的 .obj,可以以奇怪的方式指定顶点,必须小心处理才能在 OpenGL 等中正常工作。例如,一个顶点可以与两个不同的纹理坐标相关联。为了正确渲染模型,我们必须复制这样一个顶点,为每组纹理坐标创建一个唯一的顶点。检查文档以了解您用于加载模型的任何 API,并查看它是否提到顶点重复、纹理坐标等。

【讨论】:

  • 尊敬的 Josh Parnell,非常感谢您!您的回答很有帮助。根据您的分析,我认为问题来自可能性 2。所以我会努力解决它。显然,要解决它并不容易。我需要时间尝试.....
猜你喜欢
  • 2013-01-23
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-28
相关资源
最近更新 更多