2012-05-17 3 views
1

단순한 형태의 퐁 쉐이딩 모델을 사용합니다. 씬은 강도가 1 인 단색광을 사용하여 방향 -y 방향으로 빛나는 방향성 라이트로 켜집니다. 시점은 무한히 멀리 있습니다 벡터 (-1, 0, -1)에 의해 주어진 방향을 따라 보아라. 이 경우 방향 광원으로 반사 벡터 계산

이 차광 방정식

I = k_d*L(N dot L)+k_s*L(R dot V)^n_s 
Lkd 방향성 광원이다

, ks 주어진다 모두 0.5이 경우

n_s = 50 어떻게 계산할 수있는 R 벡터?

유한 벡터를 계산할 때 유한 좌표가 필요하기 때문에 혼란 스럽습니다. Directional Light의 경우, 그것은 -y 방향으로 아주 멀리 떨어져 있습니다.

답변

1

반사 벡터는 GLSL의 reflect 함수를 사용하여 계산할 수 있습니다. 그렇지 마이너스 값의 제곱 때 때문에

vec3 toEye = normalize(vec3(0.0) - vVaryingPos);  
vec3 lightRef = normalize(reflect(-light, normal)); 
float spec = pow(dot(lightRef, toEye), 64.0f); 
specularColor = vec3(1.0)*max(spec, 0.0); 

계산 ... 시각 공간에서 수행되어 있으므로 eyePos가 VEC3 인 (0.0)

+1

당신은'pow' 전에'max'를 적용 64 승은 양의 값이되고, 0으로 클램프되어야합니다. –

1

이 방정식은 법선 벡터를 사용합니다. 그래서 당신의 경우 방향성 광원을 사용할 때 L은 상수이고 [x = 0, y = 1, z = 0] (또는 [0, -1, 0])과 같음을 의미합니다. 방정식 L이 점을 가리키고 있거나 점에서 멀리 떨어져 있는지 확인해야합니다.