Наше комьюнити:   OpenGL Shader Lab  •  Half-Life FX  •  Форум  
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
Проживает: Зеленый форум
Сообщений: 8666
Возраст: 26

Рейтинг



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

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


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

__________________
Для организации коллектива надо уметь ссать в уши виртуозно (с) Raid

Отредактировано 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)
Сообщений: 1966

Рейтинг



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)
Сообщений: 1966

Рейтинг



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

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

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

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

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

Рейтинг



nemyax там не нужен GL_LINES. Там достаточно

glPolygonMode( GL_FRONT_AND_BACK, GL_LINE );

и в конце отрисовки вернуть обратно на GL_FILL. Треугольники через GL_LINES рисовать довольно дурацкая идея.

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

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

Рейтинг



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

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

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

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

Рейтинг



nemyax у тебя какое-то странное представление об OpenGL.
PLOYGON_MODE всего лишь определяет как именно мы рисуем полигоны - закрашенные или проволочные. А рисуем через тот же самый glBegin( GL_ЧТОТО_ТАМ )

__________________
В действительности всё может оказаться иначе, чем оно есть на самом деле

My Projects: download page

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

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

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

Рейтинг



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

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

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



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


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

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

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

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

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

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

Рейтинг@Mail.ru