Как заставить кисть с цветными текстурами отображаться в Open GL ES на белом фоне? - PullRequest
1 голос
/ 14 сентября 2009

Я хочу нарисовать текстурной кистью любого цвета на белом фоне, используя OpenGLES.

У меня есть растровое изображение, которое я использую CG для загрузки и превращения в текстуру. Это растровое изображение в основном черное, но в центре есть белый круг, который я хочу использовать в качестве «кисти». Другими словами, я хочу, чтобы черная часть исчезла в финальной композиции, но белая часть должна взять цвет, который я установил, используя glColor.

Лучшее, что я могу получить, - это параметры смешивания (GL_SRC_ALPHA, GL_ONE) после установки какого-либо непрозрачного яркого цвета - блеклой цветной линии на сером (не чисто белом фоне). Но когда я устанавливаю фон в чисто белый цвет, линия не видна.

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

Кто-нибудь желает объяснить мне, как я должен настроить свою текстуру и / или состояния GL, чтобы сделать яркий цвет на чистом белом, не показывая черных краев текстуры вообще? Это может быть вопрос новичка, но я попытался проработать смешанную математику, и я до сих пор просто не понимаю, как все цвета объединяются вместе.

Вот изображение, которое я использую в качестве кисти:

альтернативный текст http://www.coldcoffeeandjuice.com/OpaqueBrush.png

Вот некоторые результирующие выходные данные, когда фон серый, а glColor4f установлен на (1, 0, 0, 1), например, чисто красный, и кисть используется для нескольких последовательных GL_POINT. Обратите внимание, что хорошо в этом то, что только белая часть изображения кисти показывает красный цвет - это правильно. Плохие моменты в том, что красный, который я хочу быть чистым и ярким, бледен из-за того, что он смешивается с фоном (?) И / или белым цветом кисти (?), Так что он полностью размыт, если фон чисто белый , При этом используются параметры смешивания, как указано выше (src_alpha, one).

alt text
(источник: coldcoffeeandjuice.com )

Вот что я хочу увидеть, учитывая чистый красный цвет (спасибо Paintbrush):

alt text
(источник: coldcoffeeandjuice.com )

Может кто-нибудь помочь мне понять, что я делаю не так?

Спасибо!

1 Ответ

3 голосов
/ 21 сентября 2009

Итак, вы пытаетесь «нарисовать» данный цвет (в данном случае «красный») на фоне, используя маску для формы кисти.

Перед началом рендеринга «рисования» необходимо сделать следующее:

  1. Сначала убедитесь, что ваша кисть имеет альфа-канал, соответствующий его форме - то есть альфа-канал должен выглядеть аналогично изображению кисти, которое вы поставили.

  2. Рендеринг с установленными этими состояниями (пространство для заметок, чтобы обойти вики-разметку):

// Make the current material colour track the current color
glEnable( GL_COLOR_MATERIAL );

// Multiply the texture colour by the material colour.
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );

// Alpha blend each "dab" of paint onto background
glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA );

Смотри также:
http://www.opengl.org/documentation/specs/man_pages/hardcopy/GL/html/gl/colormaterial.html

http://www.khronos.org/opengles/documentation/opengles1_0/html/glTexEnv.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...