http://blog.csdn.net/xiajun07061225/article/details/7660810
Per-vertex渲染技術是針對每個頂點進行渲染計算,然後把計算得到的顔色值和這個頂點關聯起來。然後在多邊形的面上進行顔色插值以後的平滑的渲染效果。這也叫做Gouraud Shading。在早起的OpenGL版本中,它是預設的渲染技術。
有的時候我們需要達到遮掩過一種效果:一個多邊形上隻有一種顔色,而不是有這種插值方法得到的平滑效果。這個時候的渲染就叫做Flat Shading。
下面的圖顯示兩種渲染效果的對比:
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsIyZwpmL0MTO48lMxYDM5UTOzMTMvw1Mx8CX2AjMxAjMvw1ckF2bsBXdvwFdl5mLuR2cj5Set1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
Gouraud Shading
Flat Shading
在早起的OpenGL版本中,Flat shading效果是通過下列函數調用實作的:
glShadeModel(GL_FLAT)。
而且,目前多邊形面所使用的顔色是這個多邊形的頂點中最後一個被渲染的頂點的顔色。
在OpenGL4.0中,flat shading效果可以通過對着色器的輸入和輸出變量使用一個修飾符flat很友善的實作。
在頂點着色器的輸出變量和片斷着色器要使用作為顔色的輸入變量前使用這個修飾符即可。
這個修飾符表明了這個值在傳遞到片斷着色器的時候沒有插值發生。
最後多邊形的顔色可能是其頂點中最先或最後被渲染的頂點的顔色。可以通過下列函數調用來控制:
glProvokingVertex(GL_FIRST_VERTEX_CONVENTION);
或者是
glProvokingVertex(GL_LAST_VERTEX_CONVENTION);
參考資料:
http://www.futuretech.blinkenlights.nl/gouraud.html
http://graphics.wikia.com/wiki/Flat_shading
http://en.wikipedia.org/wiki/Gouraud_shading
http://www.cs.cmu.edu/~fp/courses/02-graphics/pdf-color/08-shading.pdf