图形学基础知识:重心坐标(Barycentric Coordinates)

本文详细介绍了如何利用重心坐标计算三角形内部任意一点的属性,包括直线、三角形的重心概念,重心坐标的几何意义,以及在实际应用中的投影矫正。通过实例演示了如何将颜色属性插值应用到Unity中的三角形图形上。
摘要由CSDN通过智能技术生成

前言

在前面的文章中我们经常提到知道某个三角形三个顶点的属性,然后就可以求出三角形内部某一点对应的属性。例如深度缓存的时候,高洛德着色的时候等等,但是我们一直没有说具体应该如何计算,本文就来介绍一下这一部分内容。

想要计算三角形内部某一点对应的属性,也就是我们一直说的三角形的插值,就需要用到重心坐标的概念。

 

直线的重心坐标

在讲三角形的重心坐标前,我们先来看一看直线上的重心坐标是怎么定义的。

求直线上任意一点

设我们有两个点 A (A_x,A_y,A_z) 和 B (B_x,B_y,B_z) ,它们可以连成一条直线。那么该直线上的任意一点 P (P_x,P_y,P_z) 必然满足:

(P_x,P_y,P_z)=(A_x+k(B_x-A_x),A_y+k(B_y-A_y),A_z+k(B_z-A_z))

k为一个常数,其值也很好求,取任意轴三个点值进行计算即可:

k=\frac{P_x-A_x}{B_x-A_x}=\frac{P_y-A_y}{B_y-A_y}=\frac{P_z-A_z}{B_z-A_z}

然后我们可得:

 \vec{AP}=k\vec{AB}

因为\vec{AP}=(A_x+k(B_x-A_x),A_y+k(B_y-A_y),A_z+k(B_z-A_z))-(A_x,A_y,A_z) 即 \vec{AP}=(k(B_x-A_x),k(B_y-A_y),k(B_z-A_z))=k\vec{AB}

而 \vec{AP} 通过向量的减法,我们可以理解为 \vec{AP}=\vec{OP}-\vec{OA},同样的 \vec{AB}=\vec{OB}-\vec{OA},那么就可得到 \vec{OP}-\vec{OA} = k (\vec{OB}-\vec{OA}) ,然后可以得到 \vec{OP} = k (\vec{OB}-\vec{OA}) +\vec{OA},最终简化可得:

\vec{OP} = (1-k)\vec{OA} + k\vec{OB}

而 \vec{OP} ,\vec{OA}\vec{OB} 分别代表的就是 P,A,B三个点的坐标,因此可得

P = (1 - k)A + kB

因为 P = ((1-k)+k)P 因此上面式子可以变为 (1-k)A+kB-((1-k)+k)P=0,化简为 (1-k)(A-P)+k(B-P),即:

(1-k)\vec{PA}+k\vec{PB}=0

 

几何意义

前面我们得到 \vec{AP}=k\vec{AB},即AP的长度 |\vec{AP}| 为 AB的长度 |\vec{AB}| 的k倍。而 BP的长度 |\vec{BP}| 又等于 |\vec{AB}| - |\vec{AP}|,因此 |\vec{BP}| 的长度为 |\vec{AB}| 的 1-k 倍。所以可得:

|\vec{AP}| : |\vec{BP}| = k:(1-k)

因为长度是没有正负的,然而实际上k可能为负数,就会导致上面的公式不对。我们先来看看下面三种情况:

0 <= k <= 1

此时P在AB之间,如下图

可得

|\vec{AP}| : |\vec{BP}| = k:(1-k)

k < 0

k < 0 ,也就是说 \vec{AP} 方向和 \vec{AB} 相反,此时P在AB之外,离A更近一些,如下图

可得

|\vec{AP}| : |\vec{BP}| = -k:(1-k)

k > 0

和前者相反,如下图

可得

|\vec{AP}| : |\vec{BP}| = k:(k-1)

总结

可以发现我们只要取绝对值,就可以满足上面的各种情况了,因此

|\vec{AP}| : |\vec{BP}| = |k|:|(1-k)|

 

直线上的重心坐标

通过上面的推导,我们就知道直线AB上的任意一点P,都可以由一个k来计算出来的。当然了,也可以通过P来推出k的值,怎么求上面已经说明过了。

<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值