OpenGL 三角形颜色插值
1.最懒的方法——Nearest Neighbor
对于三角形内的点,离三个顶点谁最近,就赋值为那个顶点对应的颜色。
2.最天真的方法——Distance
三角形内一点的值应该来自于三个顶点。
计算距离:
定义权重:
颜色表示为权重的平均:
总而言之,我们通过三角形每个顶点到点P的距离来混合定点颜色,从而定义点P的插值颜色。
这个方法简单,易于实现,而且相当直观,在一些应用中表现良好。
看到上面的例子,我们原本想要用V1和V3的颜色来表示点P的颜色,但是用这种天真的方法,由于V2距离点P最近,所以点P 大部分的颜色值来自于点P,这是我们不想看到的,这就是该方法的一大缺陷。
3.重心坐标
重心坐标的技巧就是寻找顶点V1,V2,V3的权重,来平衡下面的式子:
转化成表示权重的式子:
值得注意的是,当点P在三角形外部时,w1,w2,w3中至少有一个值是负数。
实际上,一个常见的三角形绘制算法是查看三角形周围包围框中的每个像素。然后,对于每个像素,计算重心坐标(无论如何,插值深度缓冲区、纹理坐标等都需要重心坐标)。如果其中一个权重是负数,那么该像素将被跳过。这种算法的一个优点是,显卡可以简单地并行化边界框中的每个像素。这使得绘制三角形非常快。
插值效果如下:
————————————————
版权声明:本文为CSDN博主「efu莜」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_35045096/java/article/details/95446984