Во-первых, убедитесь, что ваша текстура имеет альфа-канал.Вы упоминаете, что загружаете формат RGBA, но всегда полезно проверить исходный файл в программе для редактирования изображений.Затем убедитесь, что ваша текстура готова для рендеринга в openGL.Распространенная ошибка - забыть установить режим фильтрации текстуры через glTexParameter*
.Он начинается с настройки, требующей mipmaps, поэтому я считаю, что проще всего начать с:
glTexParameteri(GL_TEXTURE_2D, GL_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_MAG_FILTER, GL_LINEAR);
Во-вторых, вам нужно настроить openGL, чтобы быть готовым к смешиванию.Это включает glEnable
вызов с GL_BLEND
и glBlendFunc
вызов.В большинстве случаев вам нужно, чтобы вызов функции был glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
, поскольку большинство других комбинаций токенов дадут вам эффекты, которых вы не достигли (см. Страницу спецификации glBlendFunc
для получения дополнительной информации).
Наконец, убедитесь, что вы пробуете свою текстуру в разных точках.Если вы используете непосредственный режим (вы используете glVertex*
для рисования вашей сцены), вам нужно будет либо использовать glTexGen*
, либо вручную указать точки текстуры с помощью glTexCoord*
перед вызовом glVertex*
.Если вы используете данные массива для рисования вашей сцены, убедитесь, что вы включили указатель текстуры, используя glEnableClientState(GL_TEXTURE_COORD_ARRAY)
и glTexCoordPointer
.