From 9121faed0cf54a08882acf41120cf28fc3a32998 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 27 Mar 2019 22:27:57 +0000 Subject: asy 2.48 sources git-svn-id: svn://tug.org/texlive/trunk@50622 c570f23f-e606-0410-a88d-b1316a301751 --- Build/source/utils/asymptote/base/three_light.asy | 27 ++++++++++++++--------- 1 file changed, 16 insertions(+), 11 deletions(-) (limited to 'Build/source/utils/asymptote/base/three_light.asy') diff --git a/Build/source/utils/asymptote/base/three_light.asy b/Build/source/utils/asymptote/base/three_light.asy index 6cbd9b6f0be..3bd747dd4ec 100644 --- a/Build/source/utils/asymptote/base/three_light.asy +++ b/Build/source/utils/asymptote/base/three_light.asy @@ -86,36 +86,41 @@ pen color(triple normal, material m, light light, transform3 T=light.T) { real[] Ambient=rgba(m.ambient()); real[] Specular=rgba(m.specular()); real[] p=rgba(m.emissive()); + real[] diffuse={0,0,0,0}; + real[] ambient={0,0,0,0}; + real[] specular={0,0,0,0}; for(int i=0; i < position.length; ++i) { - triple L=light.viewport ? position[i] : T*position[i]; - real Ldotn=max(dot(normal,L),0); - p += light.ambient[i]*Ambient+Ldotn*light.diffuse[i]*Diffuse; - // Apply specularfactor to partially compensate non-pixel-based rendering. - if(Ldotn > 0) // Phong-Blinn model of specular reflection - p += dot(normal,unit(L+Z))^s*light.specularfactor* - light.specular[i]*Specular; + triple L=position[i]; + real dotproduct=abs(dot(normal,L)); + diffuse += dotproduct*light.diffuse[i]; + ambient += light.ambient[i]; + dotproduct=abs(dot(normal,unit(L+Z))); + // Phong-Blinn model of specular reflection + specular += dotproduct^s*light.specular[i]; } + p += diffuse*Diffuse; + p += ambient*Ambient; + // Apply specularfactor to partially compensate non-pixel-based rendering. + p += specular*Specular*light.specularfactor; return rgb(p[0],p[1],p[2])+opacity(opacity(m.diffuse())); } light operator * (transform3 t, light light) { light light=light(light); - if(!light.viewport) light.position=shiftless(t)*light.position; return light; } light operator cast(triple v) {return light(v);} -light Viewport=light(ambient=gray(0.1),specularfactor=3,viewport=true, - (0.25,-0.25,1)); +light Viewport=light(ambient=gray(0.1),specularfactor=3,(0.25,-0.25,1)); light White=light(new pen[] {rgb(0.38,0.38,0.45),rgb(0.6,0.6,0.67), rgb(0.5,0.5,0.57)},specularfactor=3, new triple[] {(-2,-1.5,-0.5),(2,1.1,-2.5),(-0.5,0,2)}); light Headlamp=light(gray(0.8),ambient=gray(0.1),specular=gray(0.7), - specularfactor=3,viewport=true,dir(42,48)); + specularfactor=3,dir(42,48)); currentlight=Headlamp; -- cgit v1.2.3