OpenGLES暗影卷

时间:2011-10-09 03:14:41

标签: ios opengl-es opengl-es-2.0

我在iOS上成功实现了影子卷。

但是我遇到了以下问题:如何将顶点位置剪切到远处平面,就像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!

1 个答案:

答案 0 :(得分:0)

干杯,在远剪裁平面,z / w = 1.所以你需要通过投影变换eyepos和ldir,然后在eyepos中添加尽可能多的ldir,使其最终在远处的平面上。这可能会很棘手,因为如果它们准确地位于多边形上,则远边剪裁平面可能会剪切多边形,因此可能需要进行一些调整。