2011-10-09 49 views
2

我成功在iOS上实现阴影量。OpenGLES Shadow Volume

但是,我得到了以下问题,我如何能像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方法(这是我实现)是专利是真的吗?这是否意味着我不能在App Store上的商业应用程序中使用它?

TIA!

回答

0

欢呼声,在远处的剪辑平面z/w = 1。因此,您需要通过投影来转换eyepos和ldir,然后向eyepos添加尽可能多的ldir,以便它在远平面处结束。这可能会很棘手,因为如果它们完全躺在它上面,那么远剪切平面可能会夹住你的多边形,所以可能需要进行一些调整。