2009-09-08 5 views
10

Sto lavorando all'app per iPhone e ho un rendering della vista openGL su un normale UIView. Funziona, ma non riesco a ottenere la vista openGL per avere uno sfondo trasparente che mostra la vista UIV sotto. Invece, ho una grande scatola nera.iPhone: stratificazione di una vista openGL trasparente in cima a un UIView?

Ho provato a impostare il colore di sfondo su UIColor clearColor, ho impostato opaco su NO, ho impostato glClearColor su 0.0.0.0,0.0,0.0.

Penso di fraintendere/utilizzare in modo errato qualcosa relativo ai metodi di fusione, ma non ne sono sicuro. Qualcuno può darmi un po 'di codice di esempio che mostra come farlo?

Grazie in anticipo.

+0

Hai mai ottenere questo lavoro? Sto avendo un problema simile. Sto usando kEAGLColorFormatRGBA8 in DrawableProperties. – westsider

risposta

11

Ecco quello che ho dovuto fare per arrivare a questo lavoro:

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

E in caso si sta facendo quello che stavo facendo e stanno cercando di provarlo con la demo GLGravity, c'è un'altra chiamata a glClearColor(0.0f, 0.0f, 0.0f, 1.0f); ogni viene chiamato il tempo drawView, quindi assicurati di cambiarlo a glClearColor(0.0f, 0.0f, 0.0f, 0.0f);! :)

+1

Ho trovato che le "proprietà disegnabili" non erano necessarie in iOS 5 e oltre – Adam

+0

TUTTAVIA ... Voglio sottolineare che DEVI chiamare "opaque = NO" in "viewDidLoad" o simile - se lo hai impostato nel file NIB, Apple silenziosamente lo sovrascrive in fase di esecuzione (male!) – Adam

2

Controllare il formato del colore della vista. Se lo hai impostato su kEAGLColorFormatRGB565 tramite il dizionario drawableProperties, il canale alfa del contenuto della vista sarà implicitamente trattato come 1.0, indipendentemente da ciò che viene disegnato in esso.

4

Aggiungi quelli 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);