#ios #opengl-es #opengl-es-2.0
#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?
ТИА!
Ответ №1:
Ура, на дальней плоскости клипа z / w = 1. Итак, вам нужно преобразовать оба eyepos и ldir с помощью проекции, а затем добавить столько ldir в eyepos, чтобы он оказался в дальней плоскости. Это может быть сложно, потому что дальняя плоскость обрезки может обрезать ваши полигоны, если они лежат точно на ней, поэтому может потребоваться некоторая настройка.