У меня есть шрам текстуры и я хочу избавиться от цвета фона кожи с помощью альфа-смешивания. Однако у меня есть проблемы с изменением непрозрачности отдельных пикселей определенных текстур. Какой самый простой способ иметь текстуры с прозрачным фоном? Я использую C ++ и openGL.
Я использую формат изображения BMP, и я пытаюсь нанести эту текстуру шрама на лицо, но цвет фона текстуры шрама кажется уродливым на лице, поэтому я хочу удалить эту часть, и на лицо нанесена только текстура шрама. Мне также нужно сделать это с помощью альфа-смешивания. Я знаю, что мне нужно использовать функцию смешивания:
glEnable (GL_BLEND);
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
Как я могу изменить прозрачность для каждой текстуры?
Похоже, вы хотите удалить фон из спрайтов. Если это так, тогда используйте программу gimp, затем нечеткий выберите фон и удалите, затем экспортируйте его и закройте, но когда он просит сохранить во время экспорта, скажите «нет». Google gimp и background edit, и вы увидите необходимую информацию и инструменты.
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 (), чтобы нарисовать спрайт.
Других решений пока нет …