为什么我的纹理映射与我的片段着色器在纹理坐标跳跃处生成线条?

Why is my texture mapping with my fragment shader generating lines at texture coordinate jumps?

我在将等距柱状全景图像映射到简单平面时遇到了很多麻烦。到目前为止,我的映射是正确的,所以一切都准确地显示在它应该出现的位置。但我的问题是,在我的纹理坐标从 1 跳到 0 的地方有一条线。但那条线不仅仅是一些线。它的像素尺寸是正常尺寸的两倍。我将它直接渲染到我的屏幕上,中间没有帧缓冲区。我试图启用多重采样,但它根本没有影响那条线。我也试图通过将它隐藏在我的相机后面来摆脱那条线,但后来我意识到,当我抬头看时,无论我把它转到哪里,总是有这条线。在我的代码中,当我使用 "if" 或 "atan" 进行纹理坐标跳跃时,总是会出现这一行。有人知道这个问题或者至少有人可以重现它吗?

这通常是由 mipmapping 引起的。当您自己包装坐标时,例如在转换为极坐标的过程中,接缝旁边的像素最终会出现大的坐标导数,这意味着错误的 mip 级别被采样。

在这种情况下,最好的解决方案可能是检查您是否真的需要 mipmap。在天空盒上,它通常没有太大区别。否则,您必须自己计算详细程度,以便正确考虑坐标跳跃。

避免该问题的另一种方法是防止接缝两侧的片段一起光栅化。您可以通过以三角形边始终与接缝对齐的方式构建天空盒网格来做到这一点,这样接缝的每一侧都位于不同的三角形中。