2012-04-08 13 views
0

Ich habe ein strukturiertes Objekt in meiner OpenGL ES-Szene (Version 1.1), für das ich das Alpha auf 0,5 ändern möchte.Alpha-Wert des OpenGL-ES-Objekts ändern - GL_BLEND - iPhone

Ich versuche, den folgenden Code:

glEnableClientState(GL_VERTEX_ARRAY); 
glEnableClientState(GL_NORMAL_ARRAY); 
glEnableClientState(GL_TEXTURE_COORD_ARRAY); 

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 
glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); 
glColor4f(1.0, 1.0, 1.0, 0.5); 

glVertexPointer(3, GL_FLOAT, 0, vertexes); 
glNormalPointer(GL_FLOAT, 0, normals); 
glTexCoordPointer(2, GL_FLOAT, 0, textures); 

GLfloat ambientAndDiffuse[] = kAmbience; 
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, ambientAndDiffuse); 
GLfloat specular[] = kSpecular; 
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular); 
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, kShininess); 
GLfloat emission[] = kEmission; 
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission); 

glDrawElements(GL_TRIANGLES, vertexCount, GL_UNSIGNED_SHORT, indices); 

glDisableClientState(GL_VERTEX_ARRAY); 
glDisableClientState(GL_NORMAL_ARRAY); 
glDisableClientState(GL_TEXTURE_COORD_ARRAY); 
glDisable(GL_BLEND); 

Das Problem besteht darin, dass die Transparenz des Modells ändert sich nicht. Das Modell wird auf dem Bildschirm korrekt angezeigt, aber die Alpha ist noch 1.

EDIT

Meine Texturen sind JPGs. Muss ich diese als PNGs speichern?

Kann jemand feststellen, wie ich das korrigieren kann?

Vielen Dank.

Antwort

1

Ah glaube, ich habe es gelöst - Sie müssen die Beleuchtung ausschalten und dann scheint es zu funktionieren.

glDisable (GL_LIGHTING);

0

Haben Sie die Textur-Umgebungsvariable so eingestellt, dass sie moduliert? Wie folgt:

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

Das teilt OpenGL mit, die Farbe des Objekts mit der Farbe der Textur zu multiplizieren. Außerdem erinnere ich mich nicht, wenn Sie eine GL_COLOR_ARRY mit glDrawElements() anstatt nur die aktuelle Farbe verwenden müssen.

+0

Danke - ich habe in dieser Zeile hinzugefügt (Code oben geändert), aber nichts ändert sich auf dem Bildschirm. – GuybrushThreepwood

+0

Der Standardwert für glTexEnvi ist GL_MODULATE. Es ist also nicht erforderlich, dies zu setzen, es sei denn, Sie haben es an einer anderen Stelle geändert. – GuybrushThreepwood