В OpenGL ES, как загрузить текстуру с прозрачными пикселями?
А потом правильно отобразится? Примером может быть круглый шар в прямоугольнике, когда он может видеть другую текстуру в фоновом режиме.
edit: В настоящий момент, когда я загружаю текстуру, прозрачные пиксели из исходного изображения отображаются как черные.
Ответы
Ответ 1
Для iPhone и N95 это работает:
Если вы загружаете текстуру из необработанных данных, установите внутренний и исходный формат в GL_RGBA.
glTexImage2D(GL_TEXTURE_2D, 0,
GL_RGBA,
textureWidth,
textureHeight,
0,
GL_RGBA,
GL_UNSIGNED_BYTE,
pointerToPixels);
И при рендеринге включите альфа-смесь:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
Ответ 2
Ответ, предоставленный @Virne, верен, и я смог использовать его для устройств Android с небольшими изменениями. Объект myImage
, который я использовал, является стандартным .png-изображением с прозрачностью.
Я создал текстуру, используя это:
GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, myImage, 0);
И (например, Virne), я включил альфа-смесь при рендеринге:
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);