текстуры с прозрачным фоном с использованием альфа-смешивания opengl

У меня есть текстуры шрамов, и я хочу избавиться от фонового цвета кожи с помощью альфа-смешивания. Однако у меня возникают проблемы с изменением непрозрачности отдельных пикселей конкретных текстур. Как проще всего получить текстуры с прозрачным фоном? Я использую C ++ и openGL.

Я использую формат изображения BMP, и я пытаюсь отобразить эту текстуру шрама на лице, но цвет фона текстуры шрама кажется некрасивым на лице, поэтому я хочу удалить эту часть и наложить на лицо только текстуру шрама. Мне также нужно сделать это с помощью альфа-смешивания. Я знаю, что мне нужно использовать функцию смешивания:

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

Как я могу изменить прозрачность для каждой текстуры?


person user3369407    schedule 01.03.2014    source источник
comment
Вам придется быть более конкретным, если вам нужна помощь. Если вы не можете описать свои проблемы словами, вы всегда можете включить диаграмму своих результатов и описание ожидаемых результатов. Но в настоящее время это в основном предположения.   -  person Andon M. Coleman    schedule 02.03.2014


Ответы (1)


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

glBlendFunc (GL_ONE, GL_ONE); 

Возможно, вы захотите использовать альфа-значения, полученные в результате наложения текстуры, в функции наложения. В таком случае (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) всегда будет хорошей функцией для начала.

Однако, если вы хотите, чтобы смешивание происходило, когда примитив отображен на текстуру (т.е. вы хотите, чтобы части карты текстуры позволяли просвечивать базовый цвет примитива), то не используйте смешивание OpenGL. Вместо этого вы должны использовать glTexEnv () и установить режим среды текстуры GL_BLEND. В этом случае вы хотите оставить цвет среды текстуры по умолчанию (0,0,0,0).

Было бы проще установить Color на (1,1,1,1) и использовать GL_MODULATE по умолчанию. Также вам разрешено использовать только определенные команды между glBegin () и glEnd, поэтому используйте только glTexCoord, glColor glVertex и другие подобные команды. Поэтому используйте одну комбинацию glBegin () / glEnd () для фона, затем измените настройки и затем используйте другую команду glBegin () / glEnd () для рисования спрайта.

person Josh    schedule 02.03.2014
comment
Привет, спасибо за ответ. Это то, что я хочу, но я использую формат изображения BMP, и этот формат не позволяет использовать прозрачный фон, поэтому инструменты для редактирования фотографий в моем случае не работают. Есть ли способ добиться этого с помощью альфа-смешивания в openGL? - person user3369407; 02.03.2014