Отключение-самолеты в OpenGL ES 2.0

Мне нужно несколько сотен объектов под отсечения плоскости в OpenGL ES 2.0 и ценят идеи от людей, более опытных с этим подмножеством OpenGL.

В OpenGL ES 1.x есть GLCLIPPLANE. На рабочем столе у ​​вас есть GLCLIPPLANE, или GL_CLIPDISTANCE в вашем шейдере. Ни один из этих двух не доступен в OpenGL ES 2.0. Кажется, что такого рода функциональность полностью исчезла с 2.0.

Похоже, что единственный способ сделать это - это либо) Запустите уравнение плоского самолета в фрагменте шейдера, либо B) Написать очень сложный вершин вершины, который позиционирует вершины на плоскости, если они остаются за ним.

(a) будет медленным по сравнению с GLCLIPLANE, поскольку «регулярное» отсечение выполняется после вершинного шейдера и перед фрагментом, каждый фрагмент все равно должен быть частично обработан и выброшен.

(b) было бы очень трудно сделать совместимость между шейдерами, поскольку мы не можем отказаться от вершин, мы должны выровнять их с плоскостью и регулировать атрибуты для тех, которые «вырезаны». Невозможно интерполировать между вершинами в шейдере, не отправляя все вершины в текстуру и образец, что было бы крайне дорогим. Часто, вероятно, невозможно ли в любом случае невозможным интерполировать данные.

Я также подумал об выравнивании возле плоскости с отсечения плоскостью, который был бы эффективным решением.

и рисунок самолета после рендеринга всей сцены и проверки на глубину не будет работать ни (если вы не смотрите рядом с перпендикулярным в самолете).

Что работает для одного объекта, состоит в том, чтобы нарисовать плоскость к буферу глубины, а затем представьте объект с помощью GldepthFunc (GL_GREATER), но, как и ожидалось, он не работает, когда один из объектов находится за другим. Я пытался построить эту концепцию, но в конечном итоге закончился чем-то очень похожем на теневые объемы и столь же дорогими.

Так что я скучаю? Как бы вы сделали самолет отсечения в OpenGL ES 2.0?

21
задан Rabbid76 1 June 2018 в 16:35
поделиться