我在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!
最佳答案
在较远的剪辑平面上加油,z / w =1。因此,您需要通过投影来变换eyepos和ldir,然后向视点添加尽可能多的ldir,使其最终在远平面处。但是,这可能很棘手,因为如果远切平面正好位于多边形上,则远裁剪平面可能会裁剪多边形,因此可能需要进行一些调整。
关于ios - OpenGLES阴影体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701211/