计算机图形学之光线跟踪算法的研究与实现2017年我的优秀毕业论文
版权所有使用者请联系我 刘创QQ:903188593
7 三角形光栅化原理解析
谈到三角形的光栅化原理,不得不说三角形的重心填充算法,实际上在射线与三角形求交的那部分也讲解到了三角形重心知识。在这里将详细讲解在计算机图形学中是如何光栅化三角形的。
对于场景中的模型网格,我们可以将它们统一归为以三角形基元组合而成。“因为把三角形作为几何图元处理的好处有如下几点:
(1) 三角形是表面的分段线性的有效逼近,如同用多条相连的线段分段去逼近一个函数或者曲线
(2) 三角形是最简单的多边形。小于3个顶点就不能构成一个表面。
(3) 三角形是平坦的。含有4个或以上顶点的多边形不一定是平坦的,因为其前三个顶点能定义一个平面,第四个顶点或许会位于该平面之上或之下。
(4) 三角形经过某些变换之后属性仍然是三角形,这对于放射变换以及透视变换也成立。最坏的情况下,从三角形的边去看,三角形有可能会退化为线段。在其他角度观察,仍能维持是三角形。
(5) 几乎所有的商用图形加速硬件都是为三角形光栅化而设计的。从比较传统的PC计算机三维图形加速器开始,其中的渲染硬件只专注于三角形的光栅化而设计。此决策还可追溯到最早期使用的软件光栅化的三维游戏,所以,基于三角形的技术已经牢牢确立在游戏业界,在未来几年应该不会有所大的改变。”[9]
在进行光栅化三角形的时候,我们会先遍历由三角形确定的包围盒(对应的坐标xMin,xMax,yMin,yMax)内的每个像素点,通过利用直线的隐式方程计算出该点的重心坐标(α,β,γ)来判断该点是否位于三角形内部。
(1) 当且仅当α,β,γ同时大于零表明该点位于三角形内部
(2) 当α,β,γ其中一个为零时表明该点位于三角形的某个边上(边界处理)
(3) 当α,β,γ其中两个为零时表明该点位于三角形的某个顶点上(边界处理)
除了1)2)3)否则该点位于三角形外部,舍弃该点的其他操作。其中α+β+γ= 1,在我们计算重心坐标时,可以只计算出前两个坐标α,β,第三个坐标用γ = 1 - α - β得出,这样减少了一部分计算量进而提高了一定的性能。
当我们用重心插值时,我们可以对三角形三个顶点的位置插值,我们同样也可以对三个顶点的法线进行插值,这样得到的法线再加上Phong模型光照将会得到更加逼真光滑的模型渲染效果,此外,我们还可以对纹理插值,△ABC光栅化如图7.1。对于给定的三个顶点的纹理坐标信息UV,我们可以就像插值顶点一样插值纹理坐标。不过在纹理进行插值时,我们需要纠正由透视导致的不正确纹理插值[10]。具体原因以及解决方案并不在本课题研究范围之内,故在此不再详细描述。
图7.1 △ABC光栅化