![]() |
Показать все 14 сообщений этой темы на одной странице |
HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- OpenGL (https://hlfx.ru/forum/forumdisplay.php?forumid=7)
-- Эффект контура ребра (https://hlfx.ru/forum/showthread.php?threadid=5119)
Эффект контура ребра
Привет всем.
Потребовалось создать эффект обводки ребра полигона, но только квадрата. Как здесь.
Движок libgdx на java. Можно писать вершинный и фрагментный шейдер.
Как я понял, есть 2 варианта:
1. Нарисовать на текстуре. Только вот материал генерируется в коде. Как достать текстуру, и как выглядит UV развертка пока что неясно. Скорее всего у такого подхода есть минус. При масштабировании линия будет нечетка видна, плюс алиасинг
2. Написать свой GLSL шейдер. В libgdx весь рендеринг завязан на стандартных шейдерах.
DefaultShader.java
fragment_shader
default_vertex
Как называется такой эффект?
Техники написания шейдеров отличаются на разных движках?
Спасибо
>> Как называется такой эффект?
Похоже на cell shading. Но там не обводится каждое ребро.
Наверное нужно искать ребра где пересекаются плоскости. И уже что то делать с ними.
__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!
FiEctro его первым делом нашел, но это не он. Этот эффект во всех 3Д-редакторах используется
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:
nemyax спасибо. Если дополнительно рендерить тот же самый меш с GL_LINES, вместо GL_TRIANGLES, то выходит то, что нужно
nemyax там не нужен GL_LINES. Там достаточно
glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );
и в конце отрисовки вернуть обратно на GL_FILL. Треугольники через GL_LINES рисовать довольно дурацкая идея.
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Но ему-то четырёхугольники нужны, а glPolygonMode обведёт треугольники, не?
nemyax у тебя какое-то странное представление об OpenGL.
PLOYGON_MODE всего лишь определяет как именно мы рисуем полигоны - закрашенные или проволочные. А рисуем через тот же самый glBegin( GL_ЧТОТО_ТАМ )
__________________
My Projects: download page
F.A.Q по XashNT
Блог разработчика в телеграме
C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'
Дядя Миша
Ну я начал, когда уже рисовали не через глбегин =)
Но да, если данные выложены под GL_TRIANGLE_STRIP или GL_TRIANGLE_FAN, то GL_LINE сделает контуры.
А возможно ли рисовать полигон и проволоку разом? Два прохода по сцене жирно получается.
Геометрическим только.
тут: https://tommyhinks.com/2011/02/10/s...rame-rendering/
говорят, что можно без геомки, но им лутшы
Можно, но тебе придётся предрасчитывать и хранить барицентрические координаты двух соседей на каждой вершине.
Временная зона GMT. Текущее время 03:10. | Показать все 14 сообщений этой темы на одной странице |
На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024