本文共 1633 字,大约阅读时间需要 5 分钟。
多边形可以使用平面着色模式或光滑着色模式填充。
平面着色是指多边形所有顶点的颜色都相同,多边形内部具有同顶点(一般取第一个顶点)一样的颜色。
在交界处出现马赫带效应,使得边界突出,破坏完整性。
光滑着色是指多边形各个顶点的颜色不同,多边形内部各点的颜色是由3个顶点的颜色的双线性插值得到。
多边形的光滑着色模式主要有Gouraud明暗处理和Phong明暗处理。更准确称为Gouraud光强插值和Phong法矢插值。
Gouraud光强插值
双线性光强插值是由Gouraud于1971年提出的,又被称为Gouraud明暗处理。它先计算物体表面多边形各顶点的光强,然后用双线性插值,求出多边形内部区域中各点的光强。它的基本算法描述如下:a)计算多边形顶点的平均法向。b)用Phong光照明模型计算顶点的平均光强。c)插值计算离散边上的各点光强。d)插值计算多边形内域中各点的光强。
顶点法向计算:我们用与顶点相邻的所有多边形的法向的平均值近似作为该顶点的近似法向量。假设顶点A相邻的多边形有k个,法向分别为N1,N2,...,Nk,我们取顶点A的法向为
而且我们发现,在一般情况下,用相邻多边形的平均法向作为顶点的法向,与该多边形物体近似的曲面的切平面比较接近,这也是我们采用上面方法计算法向的一个重要原因。
顶点平均光强计算:在求出顶点A的法向Na后,我们可以用Phong光照明模型计算在顶点处的光亮度。但是在Gourand提出明暗处理方法时,Phong模型还没有出现,他们采用的是
光强插值 : 用多边形顶点的光强进行双线性插值,可以求出多边形上各点和内部点的光强。在这个算法步骤中,我们把线性插值与扫描线算法相互结合,同时还用增量算法实现各点光强的计算。算法首先由顶点的光强插值计算各边的光强,然后由各边的光强插值计算出多边形内部点的光强,如下图所示。
双线性光强插值的公式如下:
如果我们采用增量算法,当扫描线ys由j变成j+1时,新扫描线上的点(xa,j+1)和(xb,j+1)的光强,可以由前一条扫描线与边的交点(xa,j)和(xb,j)的光强作一次加法得到:
而在一条扫描线内部,横坐标xs由xa到xb递增,当xs由i增为i+1时,多边形内的点(i+1,ys)的光强可以由同一扫描行左侧的点(i,ys)的光强作一次加法得到,即:
双线性法向插值的式子与光强插值的式子基本类似,只不过是把其中的光强项用法向量项来代替罢了,在这里我们沿用图4.2.5的记号,把I换为N,就有如下的插值公式:
同时,增量插值计算的公式也与光强插值公式相似,我们只要用法向代替光强即可,在这里我们就不在列出详细的公式了。
双线性光强插值可以有效的显示漫反射曲面,它的计算量小;而双线性法向插值与双线性光强插值相比,可以产生正确的高光区域,但它的计算量要大的多。当然,这两个插值算法的增量式光照明模型本身也都存在着一些缺陷,具体表现为:用这类模型得到的物体边缘轮廓是折线段而非光滑曲线;由于透视的原因,使等间距扫描线产生不均匀的效果;插值结果决定于插值方向,不同的插值方向会得到不同的插值结果等。
转载地址:http://hlesi.baihongyu.com/