处理超出范围 [0,1] 的 UV 值时出现锯齿状线条

Jagged lines while handling UV values out of range [0,1]

我正在解析纹理坐标大于 1 且小于 0 的 OBJ。然后我通过使 UV 值在 [0,1] 范围内写回它。基于对 another question on SO 的理解,我正在按如下方式转换到范围 [0,1]。

                if (oldU > 1.0) or (oldU < 0.0):
                    oldU = math.modf(oldU)[0] # Returns the floating part
                    if oldU < 0.0 :
                        oldU = 1 + oldU

                if (oldV > 1.0) or (oldV < 0.0):
                    oldV = math.modf(oldV)[0] # Returns the floating part
                    if oldV < 0.0:
                        oldV = 1 + oldV

但是我在输出的 obj 文件和在某些软件中呈现的原始 obj 文件中看到一些锯齿状线条:

原创

限于 [0,1]

这可能不会像您预期的那样工作。

给定一些从 U=0.9 开始并在 U=1.1 结束的三角形边,然后在你的 UV 裁剪之后你将从 0.9 开始但在 0.1 结束所以三角形将使用纹理的不同部分。我相信这发生在你的网格底部。

一般来说,在 0-1 范围之外使用 UV 没有问题,所以首先尝试按原样渲染网格,看看是否有任何问题。

如果您真的想将 UV 移动到 0-1 范围,则缩放和移动 UV,而不是按顶点剪切它们。遍历所有顶点并存储 U 和 V 的最小值和最大值,然后为每个顶点缩放 UV,因此最小值变为 0,最大值变为 1。