OpenGLES Shadow Volume - PullRequest
       2

OpenGLES Shadow Volume

2 голосов
/ 09 октября 2011

Я успешно реализую теневой объем на 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!

1 Ответ

0 голосов
/ 26 января 2012

Приветствия, в дальней плоскости отсечения, z / w = 1. Таким образом, вам нужно преобразовать eyepos и ldir посредством проекции, а затем добавить столько ldir к eyepos, чтобы он оказался в дальней плоскости.Это может быть сложно, потому что дальняя плоскость отсечения может обрезать полигоны, если они лежат точно на нем, поэтому может потребоваться некоторая настройка.

...