ios - OpenGLES阴影体积

标签 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!

最佳答案

在较远的剪辑平面上加油,z / w =1。因此,您需要通过投影来变换eyepos和ldir,然后向视点添加尽可能多的ldir,使其最终在远平面处。但是,这可能很棘手,因为如果远切平面正好位于多边形上,则远裁剪平面可能会裁剪多边形,因此可能需要进行一些调整。

关于ios - OpenGLES阴影体积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7701211/

相关文章:

iphone - The Amazing Audio Engine AERecorder 不录音

android ANativeWindow_lock api 不适用于 GLSurfaceView

android - Scaled ModelMatrix 与漫射照明混淆

ios - gl_PointCoord 在 Mac 上不可用?

ios - 应用程序后台时是否可以开始播放音频并使其他人静音?

ios - 如何使用动画更改按钮的位置

ios - Sqlite 行不删除

android - 将纹理应用于顶点缓冲区对象基元

android - 深度测试无法与模板测试一起正常工作

ios - 在iOS上使用OpenGL-ES 2.0设置横向投影的正确方法是什么?