zoukankan      html  css  js  c++  java
  • 三角形内部线性插值方法

    问题:

      在三角形的三个顶点具有3个不同颜色,如何通过插值计算出三角形中每个点的颜色?

      应用实例:高洛德着色使用3个顶点的颜色进行线性插值,结果如下图:

    解决方案:

      显然,无论是线性插值还是双线性插值的都无法解决这个问题。而使用重心坐标则可以很好的解决这个问题。简单的来说,重心坐标就是子三角形与大三角形的面积比,具体的解释参看维基百科,计算过程如下:

      已知三角形的三个顶点坐标P1, P2, P3, 在三角形内的任意点P, 都存在u和v(由于三角形是一个2D图形,只有两个自由度,所以只要u和v即可),使得

        P = (1 - u - v) * P1 + u * P2 + v * P3

      P点在三角形内,所以(u, v)必须满足条件u ≥ 0, v ≥ 0, u + v ≤ 1。u、v体现了每个顶点对特定区域的权重贡献,(1 - u - v)则是第三个权重,只要计算出u和v,就可以计算出每个顶点对P点的贡献。现在已知P1, P2, P3和P的坐标值,求解u和v,只需要解二元一次方程即可:

        P.x = (1 - u - v) * P1.x + u * P2.x + v * P3.x

        P.y = (1 - u - v) * P1.y + u * P2.y + v * P3.y

      有了u、v值,对P1, P2, P3的颜色值进行加权平均,即可得到P点颜色值。

  • 相关阅读:
    13---Net基础加强
    12---Net基础加强
    11---Net基础加强
    10---Net基础加强
    09---Net基础加强
    08---Net基础加强
    07---Net基础加强
    06---Net基础加强
    05---Net基础加强
    04---Net基础加强
  • 原文地址:https://www.cnblogs.com/wangchengfeng/p/3453194.html
Copyright © 2011-2022 走看看