《图形编程技术学习》(三十五)Phong明暗处理

一.Gouraud明暗处理的问题

1.曲面分隔可能产生错误效果

2.高光的丢失

3.马赫带效应(即光亮度变化率不连续的边界处呈现亮带或黑带)

《图形编程技术学习》(三十五)Phong明暗处理

二.Phong明暗处理

1.Phong明暗处理的思想:

不是插值光亮度颜色,而是插值法向量。故而也称为”法向量插值明暗处理“

2.对多边形顶点处法向量做双线性插值,将插值计算得到的多边形内各片元的法向量代入光亮度计算公式,得到各片元的光亮度

step1:计算出多边形各顶点的法向;

step2:多边形中的某个片元,双线性插值计算其法向;

《图形编程技术学习》(三十五)Phong明暗处理

step3:计算出多边形内该片元的光亮度。

三.不同明暗处理效果比较

《图形编程技术学习》(三十五)Phong明暗处理

《图形编程技术学习》(三十五)Phong明暗处理

Phong明暗处理的缺点是计算量大。以往图形硬件中不常采用。

《图形编程技术学习》(三十五)Phong明暗处理

Phong明暗处理是为每一个片元点都计算光照明方程

四.Phong shading计算发生在哪里?

《图形编程技术学习》(三十五)Phong明暗处理

Step1:计算出多边形各顶点的法向;

——CPU

Step2: 对多边形中的某个片元,双线性插值计算其法向;

——Rasterization

Step3:计算出多边形内该片元的光亮度。

——Fragment operation

五.三种明暗处理方法

1.常数明暗处理

2.Gouraud明暗处理

3.Phong明暗处理

(1)三种方法效果越来越好

(2)但计算机量也越来越大

(3)前两者是顶点级别的光照计算;而Phong Shading则是像素级别的光照计算。

/问题:还有别的明暗处理方法吗?/

六.凹凸纹理映射

《图形编程技术学习》(三十五)Phong明暗处理

七.OpenGL中的相关函数

glShadeModel(GLenum mode)

GL_FLAT 即常数明暗处理

GL_SMOOTH 即采用Gouraud明暗处理

《图形编程技术学习》(三十五)Phong明暗处理

扩展链接:https://www.khronos.org/registry/OpenGL-Refpages/gl2.1/