GLSL混合的貼圖+片面。
vertex shader的程式碼:
varying vec3 lightDir,normal;
void main()
{
normal = normalize(gl_NormalMatrix * gl_Normal);
lightDir = normalize(vec3(gl_LightSource[0].position));
gl_TexCoord[0] = gl_MultiTexCoord0;
gl_Position = ftransform();
}
fragment shader的程式碼:
uniform sampler2D tex;
void main()
{
vec3 ct,cf;
vec4 texel;
float intensity,at,af;
intensity = max(dot(lightDir,normalize(normal)),0.0);
cf = intensity * gl_FrontMaterial.diffuse.rgb +
gl_FrontMaterial.ambient.rgb;
//cf = intensity * (gl_FrontMaterial.diffuse.rgb +
// gl_FrontMaterial.ambient.rgb);
//af = gl_FrontMaterial.diffuse.a;
af = intensity * (gl_FrontMaterial.diffuse.a +
gl_FrontMaterial.ambient.a);
texel = texture2D(tex,gl_TexCoord[0].st);
ct = texel.rgb;
at = texel.a;
gl_FragColor = vec4(ct * cf, at * af);
//gl_FragColor = vec4(texel);
}
執行結果:
加入光照之後的效果,可以看到每個貼圖面的顏色深淺度並不相同,面對光源者亮,背對光源者暗。
參考:Tutorials » GLSL 1.2 Tutorial » Combine Texture + Fragment。
隨意留個言吧:)~