OpenGL: наложение одной текстуры на другую и подавление белого фона
Я начинающий программист Iphone opengl ES. У меня есть две текстуры, первая - это фон и занимает весь экран. Я печатаю второе изображение поверх первого изображения, но белый фон второго изображения покрывает часть фона. Я хочу, чтобы фон был виден там, где изображение на переднем плане не имеет цвета (или белого). Я не могу понять, как правильно использовать glBlendFunc.
перед печатью второго изображения я использую смешивание со следующим:
glBlendFunc (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glColor4f (1,0f, 1,0f, 1,0f, 1,0f);
Изображения по адресу: http://www.flickr.com/x/t/0097002/photos/vjv2010/
1 ответ
Я хочу, чтобы фон был виден там, где изображение на переднем плане не имеет цвета (или белого).
У вас есть два варианта, самый простой - использовать альфа-тестирование и добавить альфа-канал для вашего изображения переднего плана, чтобы каждый белый пиксель (или отсутствие цветовых зон) имел особое значение, скажем, 0.0f и все остальные 1.0f.
Затем при рендеринге переднего плана вы включаете альфа-тестирование с glEnable(GL_ALPHA_TEST)
и установите альфа-функцию с glAlphaFunc(GL_GREATER, 0.5f)
Это будет принимать / рисовать только фрагменты, которые имеют значение альфа больше, чем 0,5f и отбрасывать / не рисовать все фрагменты, которые имеют значение альфа меньше, чем 0,5f.
Второй вариант - использовать смешивание, как вы, но вам также нужно добавить дополнительный альфа-канал на передний план и установить glBlendFunc
должным образом.
Подробнее здесь: http://iphone-3d-programming.labs.oreilly.com/ch06.html