粒子的简单定向照明

时间:2017-08-22 17:14:16

标签: glsl fragment-shader particle-system

我有一个圆柱形的粒子系统。 我如何“点亮”它的一半并让它平稳地过渡到较暗的颜色,同时控制浅色的最大亮度?

这就是我想要的,但是当我改变圆柱体的半径时,较轻的侧的最浅颜色变浅,因为粒子位置越来越远离0 ..

varying vec3 fpDL;  <-- incoming particle position

vec3 objPos = vec3(0.0, 0.0, 0.0);
float fragLS = objPos.x + fpDL.x;
vec3 pColor = vec3(0.3, 0.3, 0.3);
float lightStrength = 0.001;
vec3 result = pColor * fragLS * lightStrength;
gl_FragColor = vec4(result, opacity);

我显然错过了这个等式的一些因素..

1 个答案:

答案 0 :(得分:0)

我找到了一种做我问过的方法..

varying vec3 fpDL;  <-- incoming particle position

vec3 pColor = vec3(0.3, 0.3, 0.3);
vec3 lColor = vec3(0.6, 0.6, 0.6);
float lStrength = 1.0;

vec3 objPos = vec3(0.0, fpDL.y, 0.0);
vec3 fragDir = normalize(fpDL - objPos); 
vec3 dirLight = clamp(fragDir * lStrength, 0.0, lStrength) ;
vec3 result = pColor + (dirLight.x * lColor);

gl_FragColor = vec4(result, opacity);