Перекрывающиеся 2 прозрачных Texture2D в OpenGL ES - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь сделать 2D-игру для iPad с OpenGL. Я новичок в OpenGL в целом, так что это смешивание нового.

Мой код для рисования выглядит так:

static CGFloat r=0;
r+=2.5;
r=remainder(r, 360);

glLoadIdentity();
//you can ignore the rotating and scaling
glRotatef(90, 0,0, -1);
glScalef(1, -1, 1);
glTranslatef(-1024, -768, 0);

glClearColor(0.3,0.8,1, 1.0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);


glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glEnable (GL_BLEND);
glBlendFunc (GL_ONE,GL_ONE_MINUS_SRC_ALPHA);

[texture drawInRect:CGRectMake(512-54, abs(sin(((r+45)/180)*3.14)*500), 108, 108)];
[texture drawInRect:CGRectMake(512-54, abs(sin((r/180)*3.14)*500), 108, 108)];

("texture" - это Texture2D с прозрачным фоном) Все, что мне нужно знать, это сделать так, чтобы синяя рамка вокруг текстуры не закрывала другую.

1 Ответ

0 голосов
/ 18 августа 2011

Похоже, вам просто нужно открыть изображение текстуры в вашем любимом графическом редакторе и установить синюю область непрозрачной на 0% (т.е. 0) в альфа-канале. SRC_ALPHA часть GL_ONE_MINUS_SRC_ALPHA означает альфа-значение в исходной текстуре.

Скорее всего, вы используете 32-битный цвет, в этом случае у вас будет четыре канала, 8 бит для красного, зеленого, синего и альфа-канала.

...