********************************************************************************
這是來自lightthouse3d的教程,在此拙劣的翻譯一下,完全是為了自己加深印象,若你不經意看見,請指正錯誤之處。這裡並非逐句翻譯,譯者只是試圖用更加容易理解的語句來代替原句。
**************************************************************************
GLSL可以訪問部分opengl狀態,在這個教程我們將看到GLSL通過gl—colol在opengl應用程式中如何訪問顏色。
GLSL有屬性變數跟蹤當前的顏色,也可以通過可變變數從頂點shader中擷取。
attribute vec4 gl_Color;
varying vec4 gl_FrontColor; // writable on the vertex shader
varying vec4 gl_BackColor; // writable on the vertex shader
varying vec4 gl_Color; // readable on the fragment shader
其遵循:
1.opengl應用程式通過glcolor定義(頂點)顏色值
2.頂點shader通過gl_color擷取顏色值
3.頂點shader計算front face和banck face的顏色值,分別儲存於gl_FrontColor和 gl_BackColor 。
4.片元shader接受經過插值的顏色,插值可以通過gl_FrontColor和 gl_BackColor 來計算。
5.片元shader通過gl_color設定gl_FragColor 。
可變變數必須使用同樣的名字定義在頂點和片元shader裡面,在頂點shader有連個可變變數 gl_FrontColor 和 gl_BackColor,用於表示gl_color的值這取決於face。注意屬性變數gl_color和可變變數gl_color是不衝突的,因為前者只是在頂點裡可見,而後者在偏於shader裡。
好了,說的夠多了,頂點shader的代碼如下,這裡只計算了gl_FrontColor
void main()
{
gl_Position = gl_ProjectionMatrix * gl_ModelViewMatrix * gl_Vertex;
}
片元shader代碼
void main()
{
gl_FragColor = gl_Color;
}
工程代碼可以在此下載colorshader