Смешивание OpenGL

#opengl-es #opengl-es-2.0 #color-blending

#opengl-es #opengl-es-2.0 #смешивание цветов

Вопрос:

я хочу смешать две прямые линии, но я хочу нарисовать только смешанную область (область, где прямые пересекаются), как это сделать

Комментарии:

1. Сделайте себя зарегистрированным пользователем. У вас будет больше ответов 🙂

Ответ №1:

Если вы не хотите вычислять пересечение, вы, вероятно, можете использовать буфер трафарета для достижения этой цели. читайте об этом здесь:
http://bluevoid.com/opengl/sig00/advanced00/notes/node118.html

Вы можете нарисовать две прямые линии с шагом в буфере трафарета, а затем замаскировать только те пиксели, которые имеют значение > 2, то есть пиксели, где были нарисованы 2 или более прямых линии.

Комментарии:

1. Я не думаю, что это возможно, или, может быть, я не до конца понимаю, как работает буфер трафарета, у меня есть один большой массив вершин со всеми прямоугольниками внутри, я не могу рисовать их один за другим, потому что их много и это очень медленно. Мне нужно глубже разобраться со scencil 🙂

Ответ №2:

Пересечение двух выпуклых прямых всегда является прямым. так почему бы просто не вычислить пересечение и не нарисовать только это?

Комментарии:

1. Только если они выровнены по оси 😉

2. Ну, они выровнены по оси, но вычисление этих пересечений может быть медленным, у меня около 400 прямых и 1 ГГц hummingbird.

Ответ №3:

 GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc( GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
  

Но вам следует самостоятельно настроить поведение вашей функции смешивания.
И в шейдере я установил альфа-канал. Вы можете увидеть результат:

сообщение о смешивании. исходный код Android project