Just My Life & My Work

[GLSL] Combine Texture + Fragment

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);

}

執行結果:

Combine Texture + Fragment加入光照之後的效果,可以看到每個貼圖面的顏色深淺度並不相同,面對光源者亮,背對光源者暗。

參考:Tutorials » GLSL 1.2 Tutorial » Combine Texture + Fragment

隨意留個言吧:)~

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料

標籤雲