2013-07-26 5 views
0

2D 조명에 사용하는 간단한 GLSL 프래그먼트 셰이더가 있습니다. 라이트의 반경 및/또는 강도를 구현하기 위해이를 수정하는 방법이 있습니까? 현재 사용 가능한 유일한 수정은 상수/선형/2 차 광 감쇠입니다. 강도 매개 변수로 단 곱셈 밝은 색상 -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); 
} 
+2

현실 세계의 빛에는 반지름이 없습니다. 이 임의의 반경에서 그들과 정확히 무슨 일을하고 싶습니까? –

+0

강도는 법선이 밝은 위치와의 거리로 계산할 수 있습니다. 죄송합니다. 어떤 코드도 제공 할 수 없지만 그 뒤에있는 이론이어야합니다. – Bisder

답변

0

강도입니다. 미리 곱해진 밝은 색상을 쉐이더에 전달할 수도 있습니다.

반경. 2 차 감쇠로 인해 빛의 영향은 본질적으로 제한되지 않습니다. 실용적인 목적을 위해 빛의 영향이 임의의 상수보다 큰 최대 거리로 radius를 정의 할 수 있습니다. 즉, 반지름은 빛의 감쇠와 강도에 의해 정의됩니다. 이제 무엇을하려고하는지에 따라 원하는 범위를 설정하기 위해 감쇄 또는 강도를 조정해야합니다. 셰이더 (shader) 전에 수행해야하는 작업 - 적절한 밝은 색상과 감쇠 값을 전달하십시오.