#1 楼
从镶嵌细分的角度来看,lhf的答案是好的,但是这些问题可能会在更简单的三角形网格用例中发生。 br />尽管从数学上讲,点E恰好位于线段AB上,但管道不会使用完全精确的值,例如有理数(例如https://gmplib.org/)。相反,它可能会使用浮点数,因此将引入一些近似/误差。结果可能会是这样的:
请注意,所有顶点可能都具有不准确性。尽管上面的示例显示了裂缝,但T型结可能会导致沿边缘的重叠,从而导致像素绘制两次。这看似不好,但可能会导致透明度或模版操作问题。
您可能会认为,使用浮点运算时,引入的错误将微不足道,但在渲染器中,屏幕空间顶点(X,Y)值几乎总是由定点数表示,因此距理想位置的位移通常会大得多。此外,随着渲染硬件以其自身的内部精度逐个像素“内插”线段,甚至更有可能偏离E的舍入位置。例如,通过将三角形ABC分为两个,即AEC和EBC,“去除”结,由于错误引入的偏移都将是一致的,问题将消失。
现在,您可能问为什么渲染器(尤其是硬件渲染器)将定点数学用于顶点XY坐标?他们为什么不使用浮点数来减少问题?尽管有些人确实做到了(例如Sega的Dreamcast),但它可能会导致另一个问题,即三角形的设置数学灾难性地变得不准确,尤其是对于长细三角形而言,它们以不愉快的方式改变大小。
评论
$ \ begingroup $
当您说“顶点(X,Y)值几乎总是由定点数字表示”时,我猜您是指光栅器中屏幕空间顶点坐标,对吗?不是原始的模型空间顶点。
$ \ endgroup $
–内森·里德(Nathan Reed)
2015年9月9日在20:17
$ \ begingroup $
@NathanReed是的。只是屏幕空间X&Y(也许在某些GPU上是Z)。我将对其进行编辑以使其更加清晰。
$ \ endgroup $
–西蒙F
2015年9月10日下午5:41
#2 楼
当在参数域中用网格对参数化曲面进行建模时,T型结很可能会在曲面中显示为不连续性。这些将显示为渲染中的间隙。参见下文。更一般而言,三角形网格中的T形结可能会导致插值属性(例如颜色和法线)不连续。 br />
评论
$ \ begingroup $
另请参见stackoverflow.com/questions/23530807/…。
$ \ endgroup $
–lhf
2015年9月9日,下午1:48
#3 楼
浮点舍入错误。变换T结后,T中的点可以从边缘舍入。
然后可能会发生被采样的像素位于2个表面之间的间隙中。
#4 楼
避免这种情况的简单方法是确保所有顶点都被焊接您遇到的问题是,您沿着具有顶点的边进行了切割,但是在相邻的边上没有对应的顶点要进行焊接/连接到它,如果您将它想成衬衫上的纽扣,就好像是在边上的纽扣上进行了播种,但没有给它打孔,所以织物是开放的。
在下面的图片中,红色圆点表示正确焊接的顶点,蓝色圆点都需要在相邻的边缘处切入一个附加的顶点。最好的做法是使建模保持在Quad&Tri中,这有助于缓解此问题,因为您也应该始终有相应的顶点需要焊接。如果您打算在网格上使用任何细分方法,它也有助于保持四边形。
评论
请参阅stackoverflow.com/questions/21593786/…。