HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Эффект контура ребра
Подскажите
  Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



Эффект контура ребра

Привет всем.

Потребовалось создать эффект обводки ребра полигона, но только квадрата. Как здесь.



Движок libgdx на java. Можно писать вершинный и фрагментный шейдер.
Как я понял, есть 2 варианта:
1. Нарисовать на текстуре. Только вот материал генерируется в коде. Как достать текстуру, и как выглядит UV развертка пока что неясно. Скорее всего у такого подхода есть минус. При масштабировании линия будет нечетка видна, плюс алиасинг
2. Написать свой GLSL шейдер. В libgdx весь рендеринг завязан на стандартных шейдерах.
DefaultShader.java
fragment_shader
default_vertex

Как называется такой эффект?
Техники написания шейдеров отличаются на разных движках?

Спасибо

Сообщить модератору | | IP: Записан
Сообщение: 172615

Старое сообщение 16-05-2018 13:15
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 12830
Возраст: 32

Рейтинг



>> Как называется такой эффект?

Похоже на cell shading. Но там не обводится каждое ребро.


Наверное нужно искать ребра где пересекаются плоскости. И уже что то делать с ними.

__________________
Иван Топорышкин пошел на охоту,
С ним пудель пошел, перепрыгнув забор,
Иван, как бревно провалился в болото,
А пудель в реке утонул, как топор.

Отредактировано FiEctro 16-05-2018 в 13:32

Сообщить модератору | | IP: Записан
Сообщение: 172616

Старое сообщение 16-05-2018 13:26
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



FiEctro его первым делом нашел, но это не он. Этот эффект во всех 3Д-редакторах используется

Сообщить модератору | | IP: Записан
Сообщение: 172617

Старое сообщение 16-05-2018 13:42
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



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 16-05-2018 в 14:05

Сообщить модератору | | IP: Записан
Сообщение: 172618

Старое сообщение 16-05-2018 14:56
- За что?
ILZM
LAW

Дата регистрации: Oct 2011
Проживает: Mega City One
Сообщений: 301

Рейтинг



nemyax спасибо. Если дополнительно рендерить тот же самый меш с GL_LINES, вместо GL_TRIANGLES, то выходит то, что нужно

Сообщить модератору | | IP: Записан
Сообщение: 172620

Старое сообщение 17-05-2018 12:28
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Цитата:
ILZM писал:
Если дополнительно рендерить тот же самый меш с GL_LINES, вместо GL_TRIANGLES, то выходит то, что нужно

Ну это тебе повезло. Так-то GL_LINES берёт вершины парами. Поменяется порядок вершин в треугольниках, и появятся у тебя пробелы.

Сообщить модератору | | IP: Записан
Сообщение: 172621

Старое сообщение 17-05-2018 15:17
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32130
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | | IP: Записан
Сообщение: 172622

Старое сообщение 17-05-2018 15:38
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Дядя Миша
Но ему-то четырёхугольники нужны, а glPolygonMode обведёт треугольники, не?

Сообщить модератору | | IP: Записан
Сообщение: 172623

Старое сообщение 17-05-2018 15:51
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32130
Нанёс повреждений: 392 ед.

Рейтинг



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'

Сообщить модератору | | IP: Записан
Сообщение: 172624

Старое сообщение 17-05-2018 17:00
-
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Дядя Миша
Ну я начал, когда уже рисовали не через глбегин =)
Но да, если данные выложены под GL_TRIANGLE_STRIP или GL_TRIANGLE_FAN, то GL_LINE сделает контуры.

Сообщить модератору | | IP: Записан
Сообщение: 172625

Старое сообщение 17-05-2018 17:11
- За что?
Garux
Частый гость

Дата регистрации: Mar 2015
Проживает: Металлострой
Сообщений: 98

Рейтинг



А возможно ли рисовать полигон и проволоку разом? Два прохода по сцене жирно получается.

Сообщить модератору | | IP: Записан
Сообщение: 172649

Старое сообщение 27-05-2018 20:17
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Геометрическим только.

Сообщить модератору | | IP: Записан
Сообщение: 172651

Старое сообщение 27-05-2018 23:49
- За что?
Garux
Частый гость

Дата регистрации: Mar 2015
Проживает: Металлострой
Сообщений: 98

Рейтинг



тут: https://tommyhinks.com/2011/02/10/s...rame-rendering/
говорят, что можно без геомки, но им лутшы

Сообщить модератору | | IP: Записан
Сообщение: 173322

Старое сообщение 13-07-2018 19:26
- За что?
nemyax
Нёмыч

Дата регистрации: Jul 2011
Проживает: (void)
Сообщений: 4128

Рейтинг



Можно, но тебе придётся предрасчитывать и хранить барицентрические координаты двух соседей на каждой вершине.

Сообщить модератору | | IP: Записан
Сообщение: 173323

Старое сообщение 13-07-2018 22:45
- За что?
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 04:31. Новая тема    Ответить
  Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Теория и практика > OpenGL > Эффект контура ребра
Подскажите
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024