2009-09-08 10 views
10

Je travaille sur l'application iPhone et j'ai un rendu de vue openGL en plus d'un UIView régulier. Cela fonctionne, mais je n'arrive pas à obtenir que la vue openGL ait un arrière-plan transparent qui montre l'UIView en dessous. Au lieu de cela, je reçois une grosse boîte noire.iPhone: superposer une vue openGL transparente sur un UIView?

J'ai essayé de régler la couleur de fond à UIColor clearColor, j'ai mis opaque à NO, j'ai réglé glClearColor à 0.0.0.0,0.0,0.0. Je pense que je suis mal comprendre/abuser quelque chose lié aux modes de mélange, mais je ne suis pas sûr. Quelqu'un peut-il me donner un peu d'exemple de code qui montre comment faire cela?

Merci d'avance.

+0

Avez-vous jamais ce travail? J'ai un problème similaire. J'utilise kEAGLColorFormatRGBA8 dans drawableProperties. CEPENDANT ... Je tiens à souligner que vous devez appeler "opaque = NON" dans "viewDidLoad" ou similaire - si vous le définissez dans le fichier NIB, Apple – westsider

Répondre

11

Voici ce que je devais faire pour que cela fonctionne:

eaglLayer.opaque = NO;  
eaglLayer.drawableProperties = [NSDictionary dictionaryWithObjectsAndKeys: 
           kEAGLColorFormatRGBA8, kEAGLDrawablePropertyColorFormat, nil]; 
glClearColor(0.0f, 0.0f, 0.0f, 0.0f); 

Et Incase vous faites ce que je faisais et essayons de le tester avec la démo GLGravity, il y a un autre appel à glClearColor(0.0f, 0.0f, 0.0f, 1.0f); chaque le temps drawView est appelé - alors assurez-vous de changer celui-là à glClearColor(0.0f, 0.0f, 0.0f, 0.0f); aussi! :)

+1

J'ai trouvé le "drawableProperties" inutile dans iOS 5 et supérieur – Adam

+0

écrase silencieusement à l'exécution (mal!) – Adam

2

Vérifiez le format de couleur de votre vue. Si vous l'avez défini sur kEAGLColorFormatRGB565 via le dictionnaire drawableProperties, la couche alpha du contenu de la vue sera implicitement traitée en tant que 1.0, quel que soit ce que vous y avez dessiné.

4

Ajouter ceux EAGLView.m

-(id)initWithCoder:(NSCoder*)coder 

self.opaque = NO; 
self.backgroundColor = [UIColor clearColor]; 

CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.layer; 
eaglLayer.opaque = NO; 

CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB(); 
const CGFloat myColor[] = {0.0, 0.0, 0.0, 0.0}; 
eaglLayer.backgroundColor = CGColorCreate(rgb, myColor); 
CGColorSpaceRelease(rgb); 
Questions connexes