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