Создание эффектов ластиков с использованием libgdx и OpenGL ES

Пожалуйста, обратите внимание на следующие изображения для иллюстрации: enter image description here

Сначала я заполняю весь экран/сцену отдельными изображениями, пока экран не станет розовым. Каждый капля розового цвета - это отдельный персонаж, который я добавляю на сцену.

Теперь я хочу реализовать метод touchDown таким образом, чтобы каждый раз, когда пользователь коснулся экрана, он удаляет часть этого изображения, где произошло событие касания. Однако это событие касания не должно влиять на другие изображения/актеры/текстуры, которые находятся за или над розовыми актерами блоха. Как я должен достичь этого в libgdx, используя OpenGL ES? Пожалуйста, помогите мне в этом отношении.

Я нашел эту ссылку, которая объясняет, как изменить TextureRegion, но я не знаю, как я собираюсь решить проблему, используя технику, описанную в этом блоге. Вот ссылка

Ответ 1

Не могли бы вы использовать FBO и буфер трафарета?

Установите FBO для своего "розового" слоя и буфера трафарета для него. При прикосновении нарисуйте ваше прикосновение как маску к буферу розового FBO-трафарета. Теперь, когда вы рисуете розовое FBO, области, которые вы коснулись, не будут отображаться, поэтому вы сможете увидеть фоновый FBO за ним.

Эта ссылка http://www.opengl.org/archives/resources/faq/technical/rasterization.htm, раздел 14.050 рассказывает вам, как настроить буфер трафарета:

Вы можете настроить состояние OpenGL следующим образом:

glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_ALWAYS, 0x1, 0x1);
glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);

Последующий рендеринг будет устанавливать 1 бит в буфере трафарета для каждого пиксель.

Возможно, вам придется поиграть с вещами, чтобы ваша маска была правильной (маски, в которых вы касались, а не там, где вы этого не сделали.)