繼Position Color之後,Normal也可以當成Color,只要將xyz座標的範圍限制在[0,1],接著指定給color即可。
vertex shader程式碼:
//varying float xpos;
//varying float ypos;
//varying float zpos;
varying vec4 color;
void main(void)
{
//xpos = clamp(gl_Vertex.x,0.0,1.0);
//ypos = clamp(gl_Vertex.y,0.0,1.0);
//zpos = clamp(gl_Vertex.z,0.0,1.0);
color.xyz = clamp(gl_Normal.xyz,0.0,1.0);
gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex.xyzw;
}
fragment shader程式碼:
//varying float xpos;
//varying float ypos;
//varying float zpos;
varying vec4 color;
void main (void)
{
gl_FragColor = color;
//gl_FragColor = vec4 (xpos, ypos, zpos, 1.0);
}
只修改vertex shader的一行程式:
color.xyzw = clamp(gl_Vertex.xyzw,0.0,1.0);
color.xyz = clamp(gl_Normal.xyz,0.0,1.0);
這裡要注意的是:gl_Vertex為四維,gl_Normal為三維。
想要玩些變化只要xyz排列組合即可!這是我覺得它結構很神奇的地方,而且可以重複:xxx、xxy、yzz等等。
可看到teapot和cow因為選轉的角度差不多,法向量的方向也差不多,於是blue在左、red在右、green在上,原理很簡單,(r,g,b)指定給(x,y,z),對應之下就是所看到的圖。


隨意留個言吧:)~