例如颜色等信息一般储存在三角形的顶点中,在进行着色时需要使用三个顶点的属性进行插值。在片段着色器中,通常使用三角形重心坐标进行插值。此种计算方法运算逻辑简单,适合在GPU上进行计算
2D三角形
由点a,b,c构成的2D三角形
面积公式
area=21∣∣xb−xayb−yaxc−xayc−ya∣∣=21(xayb+xbyc+xcya−xayc−xbya−xcyb)
坐标形式
p(α,β,γ)=αa+βb+γc
α+β+γ=1
当且仅当α,β,γ满足
⎩⎨⎧0<α<10<β<10<γ<1
坐标才会在三角形内
计算重心坐标
γ=(ya−yb)xc+(xb−xa)yc+xayc−xcya(ya−yb)x+(xb−xa)y+xayb−xbya
β=(ya−yc)xb+(xc−xa)yb+xayc−xcya(ya−yc)x+(xc−xa)y+xayc−xcya
α=1−β−γ
也可以用面积的比值来表示
α=Aa/Aβ=Ab/Aγ=Ac/A
在进行计算时实际只需要计算其中任意三个面积
3D三角形
面积公式
使用三维向量的叉乘运算求三角形面积
area=21∣∣(b−a)×(c−a)∣∣
但是此处计算的不是有符号面积,即计算的是三角形面积的绝对值,不能直接用于计算重心坐标。
在计算重心坐标时,需要考虑面积的符号
可以发现,按顺时针和逆时针方向定义的顶点顺序,在计算法向量时会得到方向相反的结果
而使用点乘的方式,就可以通过向量的夹角计算出有符号面积,有
α=∣∣n∣∣2n⋅na,β=∣∣n∣∣2n⋅nb,γ=∣∣n∣∣2n⋅nc
其中
na=(c−b)×(p−b)nb=(a−c)×(p−c)nc=(b−a)×(p−a)
坐标形式
坐标形式与2D相同
p(α,β,γ)=αa+βb+γc
α+β+γ=1
参考资料
Fundamentals of Computer Graphics.Fifth Edition