2009-09-08 18 views
10

Estoy trabajando en la aplicación iPhone y tengo una representación de vista OpenGL encima de una UIView normal. Está funcionando, pero parece que no puedo obtener la vista OpenGL para tener un fondo transparente que muestre la UIView debajo. En cambio, obtengo una gran caja negra.iPhone: ¿Allanando una vista OpenGL transparente en la parte superior de una UIView?

He intentado establecer el color de fondo en UIColor clearColor, he establecido opaque en NO, he configurado glClearColor en 0.0,0.0,0.0,0.0.

Creo que estoy malinterpretando/haciendo mal uso de algo relacionado con los modos de fusión, pero no estoy seguro. ¿Alguien puede darme un poco de código de muestra que muestra cómo hacer esto?

Gracias de antemano.

+0

¿Alguna vez este trabajo? Estoy teniendo un problema similar. Estoy usando kEAGLColorFormatRGBA8 en drawableProperties. – westsider

Respuesta

11

Esto es lo que tenía que hacer para conseguir que esto funcione:

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

Y en caso que usted está haciendo lo que estaba haciendo y están tratando de probarlo con la demo GLGravity, hay otra llamada a glClearColor(0.0f, 0.0f, 0.0f, 1.0f); cada se llama el tiempo drawView, ¡así que asegúrese de cambiarlo también a glClearColor(0.0f, 0.0f, 0.0f, 0.0f);! :)

+1

Encontré que "drawableProperties" no era necesario en iOS 5 y superior – Adam

+0

SIN EMBARGO ... Quiero señalar que DEBE llamar "opaque = NO" en "viewDidLoad" o similar - si lo configura en el archivo NIB, Apple silenciosamente lo sobreescribe en tiempo de ejecución (¡malvado!) – Adam

2

Compruebe el formato de color de su vista. Si lo configuró en kEAGLColorFormatRGB565 a través del diccionario drawableProperties, el canal alfa del contenido de la vista se tratará implícitamente como 1.0, independientemente de lo que dibuje en él.

4

Añadir los de 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); 
Cuestiones relacionadas