为什么我的纹理贴图与我的片段着色器在纹理坐标处生成线跳转?

时间:2016-12-30 22:48:08

标签: java opengl glsl textures fragment-shader

将equirectangular全景图像映射到一个简单的平面上我遇到了很多麻烦。到目前为止,我已经得到了正确的映射,所以一切都显示出它应该在哪里。但我的问题是,在我的纹理坐标从1跳到0的位置,有一条线。但那条线不仅仅是一条线。它的像素比正常大两倍。我将它直接渲染到我的屏幕上,而中间没有帧缓冲。我尝试启用多重采样,但它根本不影响该行。我还试图通过将它隐藏在我的相机后面来摆脱那条线,但后来我意识到当我向上看时总是有线,无论我在哪里转动它。在我的代码中,当我使用例如“if”或“atan”进行纹理坐标跳转时,此行总是显示出来。有人知道这个问题,或者至少有人可以重现它吗?

Image of the Problem

1 个答案:

答案 0 :(得分:4)

这通常是由mipmapping引起的。当您自己包裹坐标时,例如在转换为极坐标时,接缝旁边的像素最终会产生较大的坐标导数,这意味着会对错误的mip级别进行采样。

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

避免此问题的另一种方法是防止接缝两侧的碎片一起光栅化。您可以通过构建天空盒网格来实现这一点,使三角形边缘始终与接缝对齐,这样接缝的每一边都在不同的三角形中。