2011-10-09 3 views
2

iOS에서 섀도우 볼륨을 성공적으로 구현합니다.OpenGLES 섀도우 볼륨

그러나 다음과 같은 문제점이 있습니다. 어떻게 NV_depth_clamp가 GLSL에서 수행하는 것처럼 평면에 버텍스 위치를 클립 할 수 있습니까? 이 내 버텍스 쉐이더 코드 : 위의 문제를 검색하는 동안,

void main(void) { 

highp vec3 eyepos = vec3(MODELVIEW * vec4(VERTEX, 1.0)); 

normal = normalize(NORMALMATRIX * NORMAL); 

highp vec3 ldir = normalize(LIGHTPOS - eyepos); 

highp float ndotl = max(dot(normal, ldir), 0.0); 

// How can I clip that to the far plane automatically!??!!? 
if(ndotl > 0.0) gl_Position = PROJECTION * vec4(eyepos + (ldir * -2000.0), 1.0); 

else gl_Position = PROJECTION * vec4(eyepos, 1.0); 
} 

둘째, 나는 (내가 구현하는 것입니다) 특허를 섀도우 볼륨의 zfail 방법이 있다는 사실 것을 발견? 앱 스토어의 상업용 응용 프로그램에서 사용할 수 없다는 뜻입니까?

TIA!

답변

0

먼 클립면에서 z/w = 1 건배. 그래서 당신은 투영으로 eyepos와 ldir을 모두 변환해야하고, 멀리있는면에서 끝나도록 eyepos에 많은 ldir을 추가해야합니다. 하지만 까다로울 수 있습니다. 멀리있는 클립면이 정확하게 놓여 있으면 다각형이 잘릴 수 있으므로 일부 조정이 필요할 수 있습니다.