0
我有一個簡單的GLSL片段着色器,我正在使用2D光源,有什麼方法可以修改此設置來實現光線的半徑和/或強度?目前唯一可用的修改是恆定/線性/二次光衰減。2D GLSL光照半徑/強度
這裏是當前的着色器代碼(未更新爲現代的OpenGL)
uniform vec2 lightpos;
uniform vec4 lightColor;
uniform float screenHeight;
uniform vec3 lightAttenuation;
uniform float radius; //Doesn't do anything
uniform float intensity; //Doesn't do anything
uniform sampler2D texture;
void main()
{
vec2 pixel=gl_FragCoord.xy;
pixel.y=screenHeight-pixel.y;
vec2 aux=lightpos-pixel;
float distance=length(aux);
float attenuation=1.0/(lightAttenuation.x+lightAttenuation.y*distance+lightAttenuation.z*distance*distance);
vec4 color=vec4(attenuation,attenuation,attenuation,1.0)*lightColor;
gl_FragColor = color;//*texture2D(texture,gl_TexCoord[0].st);
}
真實世界中的燈光沒有半徑。你想要在這個任意半徑處發生什麼? –
強度可以通過法線與光線位置的距離來計算。對不起,我不能提供任何代碼,但這應該是它背後的理論。 – Bisder