重心坐标(Barycentric Coordinates)

重心坐标这里是将三角形内的任意点p的坐标,用三角形的顶点坐标表示出来,形如:p=iA+jB+k*C。

这样三角形任意点的坐标都可以表示为(i,j,k),对于图形学中需要对三角形内用到插值的各种功能非常有用,如纹理贴图,光照等。

为了给mini3DRender加上纹理贴图功能,就必须需要先了解三角形重心坐标。
这个文章首先会介绍三角形重心坐标,最后通过重心坐标完成三角形内插值运算。
首先先介绍一下直线的重心坐标
----_20221026090009

直线的重心坐标就是将在直线上的任意点用两个端点表示:p=jA+kB (j+k=1),我们用这个结论推一下三角形的任意点重心坐标表示。
1543e26b7d05714140dcbe196158eb6
387919aa646439bf287be3d80a60d10

5b40f8ee50f938f362ff01a472bb1ad
如上面两张草稿纸推的,我们可以得出任意点的重心坐标中的i,j,然后k就等于1-i-j。
于是我们就得到二维三角形内任意点的重心坐标。
但是,我的mini3DRender最后经过了透视投影,坐标发生了变换,我们这里计算的结果也要相应的修正。

2a8dc94d27e494aa08c62bdb46cffb0
ff0241b25d1f7507dd22d7155a7bf75

参考链接

【GAMES101-现代计算机图形学课程笔记】Lecture 09 Shading 3 (纹理映射)
图形学基础知识:重心坐标(Barycentric Coordinates)
深入探索透视纹理映射(上)
深入探索透视纹理映射(下)

展示评论