看看下面的图片 - 你会看到背景中的云有一个非常烦人的接缝:
http://simoneschbach.com/seam.png
当发生环绕时,就会出现这种接缝,因为我使用以下代码以编程方式提供纹理坐标:
gBackgroundPos += 0.0003f; // gBackgroundPos climbs indefinitely...
GLfloat bgCoords[] = { gBackgroundPos, 1.0,
gBackgroundPos + 0.5f, 1.0,
gBackgroundPos, 0.0,
gBackgroundPos + 0.5f, 0.0 };
Run Code Online (Sandbox Code Playgroud)
我在纹理初始化期间启用了纹理环绕,如下所示:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
Run Code Online (Sandbox Code Playgroud)
我可以在这里做什么来消除非常明显的接缝?
小智 5
您遇到的问题正是通过这种技术解决的,该技术实现起来非常简单:
http://vcg.isti.cnr.it/~tarini/no-seams/
该链接中有一个开源演示,它公开了所使用的片段着色器。
即使没有完全理解其工作原理,该技巧也很容易采用,但它在图形工具杂志文章中得到了充分解释:“没有顶点接缝的圆柱和环形参数化”,例如可以在 http: // /vcg.isti.cnr.it/Publications/2012/Tar12/。
不幸的是,此处列出的其他解决方案不起作用:
GL_REPEAT(如 GL_TEXTURE_WRAP)单独并不能满足您的需要。如前所述,问题在于 S = 0.9 和 S = 0.1 的三角形连接点会一直向后插值穿过圆柱体,而不是向前插值穿过接缝。
在“切割”(纹理接缝)上复制顶点将适用于静态几何体,其中纹理坐标作为属性发送(但是,即使如此,缺点也很多:引入复制,并且接缝破坏几何体:几何体的两侧)纹理切割将在拓扑上断开)。在这种情况下,纹理坐标是按程序生成的,因此这甚至不是一个选项。
| 归档时间: |
|
| 查看次数: |
4724 次 |
| 最近记录: |