********************************************************************************
这是来自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