openGL系列文章目錄
文章目錄
- openGL系列文章目錄
- 前言
- 一、Gouraud 着色(雙線性光強插值法)
- 二、phong着色
- 三、Blinn-Phong反射模型
- 總結
- 源碼下載下傳
前言
openGL光照模型有三種:
- Gouraud 着色(雙線性光強插值法)
- Phong 着色
-
Blinn-Phong 反射模型
有什麼差別呢?
1.Gouraud 着色(雙線性光強插值法)的效果
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0gTMx81dsQWZ4lmZf1GLlpXazVmcvwFciV2dsQXYtJ3bm9CX9s2RkBnVHFmb1clWvB3MaVnRtp1XlBXe0xCMy81dvRWYoNHLwEzX5xCMx8FesU2cfdGLwMzX0xiRGZkRGZ0Xy9GbvNGLpZTY1EmMZVDUSFTU4VFRR9Fd4VGdsYTMfVmepNHLrJXYtJXZ0F2dvwVZnFWbp1zczV2YvJHctM3cv1Ce-cmbw5SOzQzMyYDZ5M2M1QzN5MzYyYzXzMzM0kDM1AzLcdDMyIDMy8CXn9Gbi9CXzV2Zh1WavwVbvNmLvR3YxUjLyM3Lc9CX6MHc0RHaiojIsJye.png)
可以看到高光鏡面,光斑有散開的僞影
2.Phong 着色
可以考到phong光照,高光光斑比較自然一些
3.Blinn-Phong 反射模型效果
一、Gouraud 着色(雙線性光強插值法)
Gouraud 着色過程如下。
(1)确定每個頂點的顔色,以及光照相關計算。
(2)允許正常的光栅化過程在插入像素時對顔色也進行插值(同時也對光照進行插值)。
在OpenGL 中,這表示大多數光照計算都是在頂點着色器中完成的,片段着色器僅做傳
遞并展示自動插值的光照後的顔色。
二、phong着色
Bui Tuong Phong 在猶他大學的研究所學生期間開發了一種平滑的着色算法,在1973 年的論
文[PH73]中對其進行了描述,并在[PH75]中發表。該算法的結構類似于Gouraud 着色的算法,其
不同之處在于光照計算是按像素而非頂點完成。由于光照計算需要法向量N 和光向量L,
但在模型中僅頂點包含這些資訊,是以Phong 着色通常使用巧妙的“技巧”來實作,其中N
和L 在頂點着色器中進行計算,并在光栅化期間插值。
三、Blinn-Phong反射模型
雖然Phong 着色有着比Gouraud 着色更真實的效果,但這是建立在增大性能消耗的基礎
上的。James Blinn 在1977 年提出了一種對于Phong 着色的優化方法[BL77],被稱為Blinn-Phong
反射模型。這種優化是基于觀察到Phong 着色中消耗最大的計算之一是解出反射向量R。
Blinn 發現向量R 在計算過程中并不是必需的——R 隻是用來計算角φ 的手段。角φ 的
計算可以不用向量R,而通過L 與V 的角平分線向量H 得到。如圖1 所示,H 和N 之
間的角α 剛好等于1⁄2(φ)。雖然α 與φ 不同,但Blinn 展示了使用α 代替φ 就已經可以獲得
足夠好的結果。
角平分線向量可以簡單地使用L+V 得到(見圖2),之後cos(α)可以通過•) )H N的點積計算。
圖1
圖二