Форум программистов, компьютерный форум, киберфорум
Наши страницы
OpenGL
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/2: Рейтинг темы: голосов - 2, средняя оценка - 5.00
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
1

Изменение цвета на пересечение двух фигур

14.11.2017, 19:08. Просмотров 456. Ответов 16

Здравствуйте! В openGL я новичок, в связи эти прошу помощи. Программа разрабатывается на openGL ES 2.0, OS – Android, Java. Задача: В плоскости XY рисуются два треугольника зелёного цвета. Если треугольник пересекают друг друга, то перекрытие должно закрашиваться красным цветом. Цвета приведены для примера. Как лучше это сделать? Если правильно понимаю, то желательно использовать фрагментный шейдер? Всем спасибо!
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.11.2017, 19:08
Ответы с готовыми решениями:

Пересечение цвета двух элементов
задали на учебе, никак не могу разобраться, помогите, пожалуйста. Нужно нарисовать два квадрата...

Программа для определения взаимного расположения (пересечение, вложенность, касание, концентричность) двух фигур
Здравствуйте! Требуется написать программу, которая проверяет эллипс и прямоугольный треугольник на...

Вывести на экран изображения двух геометрических фигур заданного цвета
Составить программу, которая выводит на экран изображения двух геометрических фигур заданного...

Изменение цвета двух ячеек при изменении данных двух других ячеек
Всем привет! Нужна помощь. Вопрос такой: Есть два столбца А и В и два зависимых от них столбцы C и...

Найти пересечение двух множеств и вывести данное пересечение и кол-во элементов в нем
Здравствуйте, помогите, пожалуйста, дорешать задачу. Условие: найти пересечение двух множеств и...

16
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,231
Записей в блоге: 5
14.11.2017, 19:57 2
Как вариант:
1) Подключить стенсил буфер, очистить в 0
2) Рисовать треугольники с инкрементом в стенселе
3) Рисовать фуллскринквад красного цвета только там где стенсил больше одного.
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
14.11.2017, 20:12  [ТС] 3
Спасибо за ответ! А есть пример кода для ознакомления, я просто про такие вещи пока не знаю?

Добавлено через 6 минут
Если я правильно понимаю, то в фрагментном шейдере задается цвет каждого пиксела, можно ли задать условие: если цвет закрашиваемого равен зелёному, то красим красным, иначе - зелёным? Возможно неправильно изложил, не судите строго в opengl я не силён.
0
Excalibur921
803 / 490 / 87
Регистрация: 12.10.2013
Сообщений: 3,247
14.11.2017, 21:49 4
http://www.opengl-master.ru/view_post.php?id=60
1
14.11.2017, 21:49
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
14.11.2017, 22:11  [ТС] 5
Excalibur921, спасибо! Сейчас попробую
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,231
Записей в блоге: 5
15.11.2017, 14:19 6
Excalibur921, альфа смешивание не даст вам нужного результата
volodja_, http://www.opengl.org.ru/books/open_gl/chapter4.12.html
1
Excalibur921
803 / 490 / 87
Регистрация: 12.10.2013
Сообщений: 3,247
15.11.2017, 16:31 7
https://veendeta.wordpress.com/2012/...loring-shapes/
https://www.opengl.org/archives/reso.../examples.html
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
15.11.2017, 16:45  [ТС] 8
Я что-то так и не понял. Альфа смешивание позволит поменять цвет на пересечении или нужно использовать трафарет?
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,231
Записей в блоге: 5
15.11.2017, 16:50 9
Цитата Сообщение от volodja_ Посмотреть сообщение
Альфа смешивание позволит поменять цвет
Вот и мне интересно, как Excalibur921 собирается получить красный цвет из НЕ красных фигур путём альфа-бленда? Может я чего не знаю?
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
15.11.2017, 16:53  [ТС] 10
Извиняюсь за повторение. А во фрагментном шейдере можно цвет поменять?
0
snake32
1821 / 1137 / 203
Регистрация: 26.02.2009
Сообщений: 4,231
Записей в блоге: 5
15.11.2017, 17:01 11
Цитата Сообщение от volodja_ Посмотреть сообщение
А во фрагментном шейдере можно цвет поменять?
Можно, но для этого вам нужно знать что уже нарисовано, однако, напрямую прочитать фрагмент из буфера кадра нельзя, можно только записать новый цвет в буфер, но не считать. Вот такие ограничения есть из-за параллельного выполнения.
Можно после каждой фигуры записывать кадр в текстуру и передавать её в шейдер, но зачем гонять текстуру(внеэкранный буфер) когда трафарет подходит под это дело?
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
15.11.2017, 17:07  [ТС] 12
Спасибо, snake32! Буду сейчас разбираться с трафаретом. Если не составит труда, подскажите, пожалуйста, примерный порядок действия.
0
Excalibur921
803 / 490 / 87
Регистрация: 12.10.2013
Сообщений: 3,247
15.11.2017, 17:19 13
Цитата Сообщение от volodja_ Посмотреть сообщение
Цвета приведены для примера
Я понял как выделить другим цветом место пересечения.
Судя по картинкам можно так и так.
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
15.11.2017, 17:34  [ТС] 14
Да цвета приведены для примера, но я хотел бы конкретно задать цвет треугольников и цвет пересечения. Альфа смешиванием у меня получилось добиться более тёмного цвета на пересечении, чем простой прозрачностью. Наверное я не до конца понял как надо делать.

Добавлено через 9 минут
Excalibur921, подскажите пожалуйста, как при помощи альфа смешивания закрашивать перекрытия совсем другим цветом?
0
Excalibur921
803 / 490 / 87
Регистрация: 12.10.2013
Сообщений: 3,247
15.11.2017, 18:02 15
В blend еще вроде куча законов смешивания+вроде можно задать свой.
Цитата Сообщение от volodja_ Посмотреть сообщение
хотел бы конкретно задать цвет
Тогда стенсил.
Цитата Сообщение от volodja_ Посмотреть сообщение
примерный порядок действия.
Гуглите примеров навалом готовых.
https://www.opengl.org/archives/reso...s/examples.htm
Blend и stencil коды.

Добавлено через 17 минут
Гуглите коды. Вот тут рис. 3 круга смешаны зеленый + красный = желтый.
http://www.learnopengles.com/tag/additive-blending/
Да берите стенсил и не страдайте.
1
volodja_
0 / 0 / 0
Регистрация: 19.10.2017
Сообщений: 8
15.11.2017, 18:40  [ТС] 16
Спасибо, Excalibur921! Буду изучать.
0
ILinker
Фриланс Pascal/Delphi etc
64 / 72 / 16
Регистрация: 25.11.2016
Сообщений: 263
18.11.2017, 20:10 17
volodja_, может вывод по маске поможет.
0
18.11.2017, 20:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.11.2017, 20:10

Cинхронное изменение состояние группы RadioButton и цвета фона двух програм
Передача сообщений между приложениями: пара программ, каждая из которых создает окно, содержащее...

Пересечение фигур
Добрый день всем. Вопрос о пересечении фигур в canvas. Есть две фигуры как указано на рисунке а мне...

Пересечение фигур
Всем привет! У меня возникла проблема с задачей представленной ниже: Реализовать иерархию...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru