OpenGLES 阴影体积
Posted
技术标签:
【中文标题】OpenGLES 阴影体积【英文标题】:OpenGLES Shadow Volume 【发布时间】:2011-10-09 03:14:40 【问题描述】:我在 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 );
其次,在搜索上面的问题时,我发现shadow volume zfail方法(这是我实现的)获得了专利,是真的吗?这是否意味着我不能在 App Store 的商业应用程序中使用它?
TIA!
【问题讨论】:
【参考方案1】:干杯,在远剪辑平面上,z/w = 1。因此,您需要通过投影变换 eyepos 和 ldir,然后将尽可能多的 ldir 添加到 eyepos 以使其最终到达远平面。不过,这可能会很棘手,因为如果远裁剪平面正好位于其上,则它们可能会裁剪您的多边形,因此可能需要进行一些调整。
【讨论】:
以上是关于OpenGLES 阴影体积的主要内容,如果未能解决你的问题,请参考以下文章
IOS OpenGL ES GPUImage 图像阴影和深度效果 GPUImageMultiplyBlendFilter