使用重心坐标插值三角形顶点的任何属性

三角形重心坐标插值的作用?

在图形学中,利用重心坐标在三角形内部进行任何属性(位置、纹理坐标、颜色、法线、深度、材质属性…)的插值。一般我们通过其他步骤都会得到三角形顶点上的属性,但继续计算时需要用到三角形内部的某点的属性值,利用重心坐标可以得到三角形内部该值的平滑过渡。

什么是重心坐标(此处只考虑三角形)?

重心坐标是由三角形顶点定义的坐标。

  • 三角形上的任一顶点p(x,y)都可以用三个顶点的线性组合表示:p=w1a+w2b+w3*c
  • 且系数之和为1:w1+w2+w3=1 (只有系数之和为1,p点才在这个三角形所在的平面上)
  • 当满足三个系数都为非负数时,该点在三角形内部
  • 可以看出,重心坐标是齐次坐标的一种

这三个系数所表示的坐标(w1,w2,w3),就是该三角形上p点的(归一化)重心坐标。

为什么三个和为1的系数可以表示p点

三角形的顶点分别为a,b,c,将a看作为坐标系原点,a到b和c的向量为基向量,那么任意点p可以表示为
p=a+β(b-a)+γ(c-a)
移项得到:
p=(1-β-γ)a+βb+γc
定义一个新变量α,使得
α=1-β-γ
得出
p(α,β,γ)=αa+βb+γc,其中α+β+γ=1
所以点p的重心坐标就是p(α,β,γ)
重心坐标不仅可以表示三角形内部的点,也可以表示平面内的任意点,任意点在三角形abc内部,当且仅当
0<α<1,0<β<1,0<γ<1
当一个坐标为0,其余两个在(0,1)区间时,点落在三角形边上,如果两个坐标为0,另一个为1时,点落在三角形顶点上

重心坐标的由来

对于p=w1p1+w2p2+w3p3变形得w1(p1-p)+w2*(p2-p)+w3*(p3-p)=0,即
w1 p p 1 ⃗ \vec{pp1} pp1 +w2 p p 2 ⃗ \vec{pp2} pp2 +w3 p p 3 ⃗ \vec{pp3} pp3 =0
上式说明,如果p1点挂重物w1,p2点挂重物w2,p3点挂重物w3,则p正好是重心,如果把p点放在避雷针上,能够保持平衡

计算重心坐标的方法

面积法

A的系数α:其对应的三角形面积AA(红色部分)占总面积的比值
B的系数β:其对应的三角形面积AB(黄色部分)占总面积的比值
C的系数γ:其对应的三角形面积AC(蓝色部分)占总面积的比值
在这里插入图片描述

公式法

β= ( y − y a ) ( x c − x a ) − ( x − x a ) ( y c − y a ) ( y b − y a ) ( x c − x a ) − ( x b − x a ) ( y c − y a ) {(y-ya)(xc-xa)-(x-xa)(yc-ya) \over (yb-ya)(xc-xa)-(xb-xa)(yc-ya)} (ybya)(xcxa)(xbxa)(ycya)(yya)(xcxa)(xxa)(ycya)
γ= ( y − y a ) ( x b − x a ) − ( x − x a ) ( y b − y a ) ( y c − y a ) ( x b − x a ) − ( x c − x a ) ( y b − y a ) {(y-ya)(xb-xa)-(x-xa)(yb-ya) \over (yc-ya)(xb-xa)-(xc-xa)(yb-ya)} (ycya)(xbxa)(xcxa)(ybya)(yya)(xbxa)(xxa)(ybya)
α=1-β-γ

三角形颜色插值实现

1.使用公式法计算出每个像素点的重心坐标α、β、γ
2.三角形的三个顶点为a,b,c,对于在三角形内部的像素p,它的颜色值为

p.color.red=α*a.color.red+β*b.color.red+γ*c.color.red;
p.color.green=α*a.color.green+β*b.color.green+γ*c.color.green;
p.color.blue=α*a.color.blue+β*b.color.blue+γ*c.color.blue;

在这里插入图片描述

参考

图形学数学 | 利用重心坐标平滑插值三角形顶点的任何属性

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

百口可乐__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值