opengl - how to remove those ugly seams between patch boundaries from the texture atlas?
问题描述
When I try to render a textured 3D model with a GLSL shader with OpenTK, I get very ugly seams between texture patches. Does anyone know how to remove them?
the 3D model comes from the sketchfab.com,
解决方案
从这个屏幕截图中很难判断问题是 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,并查看它是否提到顶点重复、纹理坐标等。
推荐阅读
- r - 有没有办法与一个表合并,如果没有找到第二个表?
- c - 在 C 中初始化一个 char 指针数组
- database - H2 DB 损坏:java.lang.IllegalStateException:未找到块 1936 [1.4.200/9]
- r - ggpubr ggbarplot 用奇异的 xvalues 绘制
- sql - Postgresql搜索是否存在于嵌套的jsonb中
- python - 递归什么时候停止
- project - 如何在熔块中添加液泵和外部电源部分?
- java - OpenOffice 和 JODConveter 上的 Lucee Throwing 错误
- javascript - 用javascript获取div的宽度
- php - 如何添加翻译到 CustomerAdressForm.php Prestashop 1.7.5