• 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

  • 相关阅读:
    【Rust】无关联类型
    【Rust】trait克隆
    【Rust】trait动态返回
    【Rust】trait迭代器
    【Rust】特质trait
    【Rust】运算符重载
    【Rust】trait超集
    【Rust】trait删除
    【Rust】trait实现
    wpf之数据模板 安静点
  • 原文地址:https://www.cnblogs.com/yang131/p/13237353.html
Copyright © 2020-2023  润新知