Добавление декали с помощью мультитекстурирования на iPhone - PullRequest
3 голосов
/ 16 декабря 2009

Я пытаюсь наложить одно изображение поверх другого на простой квад. Я устанавливаю свое нижнее изображение в качестве единицы текстуры 0, а затем мое верхнее изображение (которое имеет переменную альфа) в качестве единицы текстуры 1. Модуль 2 имеет режим GL_DECAL, что означает, что нижняя текстура должна отображаться, когда альфа равна 0, верхняя текстура должна отображаться, когда альфа равен 1. Но отображается только верхняя текстура, а нижняя вообще не отображается. Это просто белый цвет, где нижняя текстура должна просвечивать.

glGetError () не сообщает о каких-либо проблемах. Любая помощь приветствуется. Спасибо!

glVertexPointer(3, GL_FLOAT, 0, boxVertices);
glEnableClientState(GL_VERTEX_ARRAY);

glClientActiveTexture(GL_TEXTURE0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords);
glClientActiveTexture(GL_TEXTURE1);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords);

glClientActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glClientActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);

glClientActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, one.texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glClientActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, two.texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

1 Ответ

0 голосов
/ 16 декабря 2009

Поскольку вы используете массивы вершин, вам нужно использовать glClientActiveTexture вместо glActiveTexture при настройке координат текстуры.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...