В OpenGL ES как загрузить текстуру с прозрачными пикселями? - PullRequest
23 голосов
/ 04 марта 2009

А потом правильно отобразить? Примером может быть наличие круглого шара в прямоугольнике и возможность видеть другую текстуру на заднем плане.

edit: В данный момент, когда я загружаю текстуру, прозрачные пиксели исходного изображения отображаются черными.

Ответы [ 2 ]

31 голосов
/ 04 марта 2009

Для 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);
12 голосов
/ 04 ноября 2011

Ответ, предоставленный @Virne, является правильным, и я смог использовать его для устройств Android с несколькими небольшими модификациями. Используемый мной объект myImage - это стандартное изображение .png с прозрачностью.

Я создал текстуру, используя это:

GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, myImage, 0);

И (как и Вирн) я включил альфа-смешение при рендеринге:

gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_BLEND);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...