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

Android NDK SDL2 OpenGL ES 2 阴影映射(定向)- 可能吗?

OpenGL 阴影贴图移动版不起作用

当阴影相机移动时,Opengl es 2.0阴影会闪烁

OpenGL C++ SDL 2D 阴影

影子卷 - 最后阶段