Потребовалось создать эффект обводки ребра полигона, но только квадрата. Как здесь.
Движок libgdx на java. Можно писать вершинный и фрагментный шейдер.
Как я понял, есть 2 варианта:
1. Нарисовать на текстуре. Только вот материал генерируется в коде. Как достать текстуру, и как выглядит UV развертка пока что неясно. Скорее всего у такого подхода есть минус. При масштабировании линия будет нечетка видна, плюс алиасинг
2. Написать свой GLSL шейдер. В libgdx весь рендеринг завязан на стандартных шейдерах. DefaultShader.java fragment_shader default_vertex
Как называется такой эффект?
Техники написания шейдеров отличаются на разных движках?
Похоже на cell shading. Но там не обводится каждое ребро.
Наверное нужно искать ребра где пересекаются плоскости. И уже что то делать с ними.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
ILZM
Я для такого отдельно вызываю glDrawArrays(GL_LINES, otkuda1, skoka1); и glDrawArrays(GL_TRIANGLES, otkuda2, skoka2);
В шейдере держу uniform int для обозначения режима отображения. А перед каждым из этих вызовов устанавливаю униформу в соответствующее значение, типа glUniform1i(comp_uniform, DRAW_EDGES);
Только вершинам рёбер придётся слегка подвинуть gl_Position.
Если хочешь, можешь генерить рёбра геометрическим шейдером в виде узких прямоугольников рожей в экран. Я пробовал, но мне не понравилось. И уж в Wings оно точно рисуется без геомки.
Добавлено 16-05-2018 в 17:56:
Цитата:
ILZM писал:
Нарисовать на текстуре
Есть вариант нарисовать не на текстуре, а во фрагментнике, без рендеринга дополнительных вершин. Но потребуется информация про целые треугольники, чтобы вычислять барицентрические координаты фрагментов. Она бесплатно доступна опять-таки в геометрических шейдерах, но если движок у тебя их не держит, то придётся координаты двух соседних вершин пхать в дополнительные атрибуты вершины, чтобы обрабатывать в вершиннике и передавать во фрагментник.
nemyax у тебя какое-то странное представление об OpenGL.
PLOYGON_MODE всего лишь определяет как именно мы рисуем полигоны - закрашенные или проволочные. А рисуем через тот же самый glBegin( GL_ЧТОТО_ТАМ )
Дядя Миша
Ну я начал, когда уже рисовали не через глбегин =)
Но да, если данные выложены под GL_TRIANGLE_STRIP или GL_TRIANGLE_FAN, то GL_LINE сделает контуры.