Как можно малой кровью выполнить сечение 3д сцены плоскостью? Вот посмотрите на картинку:

Сделать простое сечение не сложно, достаточно во фрагментный шейдер запушить плоскость и дискардить пиксели с одной из сторон от плоскости, это понятно, но как сделать такое сечение с "крышкой" (cap), то что на рисунке синим закрашено? То есть ты отсёк модель и видишь как бы её требуха, пространство между стенками и тд и вот что бы такого не было, нужна как бы крышка, а как её сделать по простому? В шейдерах?
Понятно дело, что можно булевыми операциями тупо модель отсечь и построить новую, но мне кажется, для данной задачи это конкретный оверкил, может через стенсил как-то...?
Можно постпроцессом делать трассировку и соединять грани, типа SSR.
Можно всю геометрию хранить ввиде передняя и задняя стенка, тогда в геом шейдере можно отсекать и соединять.
В компьют шейдере отрезать, сохранять места отреза и потом их соединять. После рисовать.
/A\
> Можно всю геометрию хранить ввиде передняя и задняя стенка, тогда в геом
> шейдере можно отсекать и соединять.
вроде так раньше делали, в общем буду думать...
Если модель замкнутая и без самопересечений, то можно имитировать крышку - рисовать бэкфейсы и либо закрашивать их одним цветом, как на картинке, либо, если нужен шейдинг крышки, находить пересечение вьювектора с секущей плоскостью ну и так далее.
Солидворкс ... Крутотень
Csg кури
С ориентированными полигонами такое легко можно было провернуть даже в FFP, просто используя секущую плоскость и рисуя задники исключительно эмиссионным цветом (одним и тем же).
Отключить куллинг и отрисовать с проверкой на дот клип-плейн нормал в пиксельном шейдере.
Интереснее будет, когда надо будет сечь углом или вообще каким-нибудь коническим или цилиндрическим сечением.
Не будет: + проверять принадлежность пикселя той или иной фигуре
innuendo
> Солидворкс ... Крутотень
Ага. Они там UI в shared context-е через glBegin glEnd рисуют (по крайней мере года 4 назад так было), мощные ребята.
THE_MASTER
> может через стенсил как-то...?
Если модель замкнутая и без самопересечений - то да, через стенсил можно. Отключаешь DepthTest. Стенсил тест в GL_ALWAYS и GL_INVERT на pass. Рисуешь модель с отсечением. Там где стенсил не 0 - можно красить синим.
MrShoor
Сделай гибку металла sheet metal operation
Развертку из солид боди как у них я за тебя порадуюсь
ncuxonaT
> Если модель замкнутая и без самопересечений
Тогда просто ставим плоскость отсечения и рисуем в первый проход только в Z-буфер, а второй с инвертированным куллингом в Color-буфер.
innuendo
> Сделай гибку металла sheet metal operation
Гибку уже делал. Не рокетсаинс.
> Развертку из солид боди как у них
Разверку не делал, ибо задачи не стояло
На 50% порадуешься?
MrShoor
Гибку делал? Да ты просто герой ...куда мне до тебя ...
Какое ядро юзал али не секрет?
innuendo
> Какое ядро юзал али не секрет?
Зачем ядро? Сам гибку пилил. Любое ядро сдохнет по перфомансу на моих требованиях.
Тема в архиве.