다수의 광원.
반응형
기억할 것 : 광원으로의 방향이 아니라, 광원으로 부터 나온 빛이 향하는 방향.
(0,1,0)이면 광원이 +y으로 향한다는 의미이다.
보통 쉐이더에 인자로 넘겨주는 방향은 빛이 광원으로 부터 표면으로 향하는 방향인데
이를 쉐이더에서 -로 하여 사용해야 한다.
float3 L = - normalize(lightDirection);
그렇지 않다면 처음 입력부터 지표면에서 광원으로 향하는 방향을 넘겨서 -을 붙이지 않으면 된다.
다수의 광원일 경우에는 각 광원에 대해서 확산성분과 정반사 성분을 각각 계산하여 모두 더하고
환경성분은 전체적으로 한번만 더하면 된다.
float4 finalColor = 0;
for (int i=0; i<2; i++) {
finalColor += saturate( dot( (float3)lightDirs[i],input.normal) * lightColors[i] );
}
finalColor.a = 1;
위의 예에서 재질의 컬러는 제외대상이다.
'Study > Directx 10' 카테고리의 다른 글
방향성광원, 점광원 (0) | 2010.05.15 |
---|---|
광원(확산, 정반사, 환경) (0) | 2010.05.15 |
쉐이딩 모드 (0) | 2010.05.14 |
픽킹 (0) | 2010.05.13 |
경계볼륨 - 경계구, 경계상자 (0) | 2010.05.11 |
TAGS.