Смешивание текстуры для мягкого стирания альфа-значений с помощью OpenGL - PullRequest
9 голосов
/ 02 ноября 2010

У меня есть небольшое приложение для рисования, основанное на примере кода GLPaint.Работает нормально.Моя проблема в том, что мне нужно реализовать «кисть», которая стирает текстуры, которые уже были нарисованы.

Моя цель - иметь ластик с мягкими краями.Прямо сейчас я взял ту же текстуру, что и для рисования, но переключил функции смешивания с

glBlendFunc(GL_SRC_ALPHA, GL_ONE);

на

glBlendFunc(GL_ZERO, GL_ZERO);

В результате получился квадратный прямоугольный ластик.Это нормально, но это не то, чего я на самом деле хочу.Мне нужны мягкие края.Я хочу сделать круглый ластик, а не квадратный прямоугольник.

Есть ли у вас какие-либо догадки, как этого добиться?Или вы знаете, есть ли способ создать собственную функцию смешивания?

1 Ответ

12 голосов
/ 02 ноября 2010

Знаете ли вы цвет фона текстуры?Если так, то вместо «стирания» вы можете просто закрасить фон поверх него.Это было бы несколько проще, так как вы изменили бы только цвет, а не мод наложения.

Если вам нужно сделать это с наложением, попробуйте:

glBlendFunc(GL_ZERO, GL_ONE_MINUS_SRC_ALPHA);

Это будет использовать нольв области полной альфы и постепенно исчезают в существующий цвет, когда альфа кисти исчезает.

Эта страница содержит полный список возможных режимов: http://www.opengl.org/sdk/docs/man/xhtml/glBlendFunc.xml

...