¿Hay alguna manera de hacer transparente el fondo de un GLKView? He intentado la solución here pero eso no funciona para mí.OpenGL ES 2.0 GLKit con fondo transparente
* EDIT: Necesito ayuda para que sea completamente transparente. El fondo es en su mayoría blanco y gris, pero acabo de probarlo con colores más vivos y, por supuesto, puede ver vagamente hasta el fondo. ¿Alguna idea de por qué sería parcialmente transparente pero no completamente con el siguiente código?
Aquí está el código en mi controlador de vista:
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2] autorelease];
CAEAGLLayer *eaglLayer = (CAEAGLLayer *)self.view.layer;
eaglLayer.opaque = NO;
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.backgroundColor = [UIColor clearColor];
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[self setupGL];
}
- (void)setupGL
{
[EAGLContext setCurrentContext:self.context];
self.effect = [[[GLKBaseEffect alloc] init] autorelease];
self.effect.light0.enabled = GL_FALSE;
self.effect.light0.diffuseColor = GLKVector4Make(1.0f, 0.4f, 0.4f, 0.0f);
self.effect.light0.ambientColor = GLKVector4Make(1.0f, 0.4f, 0.4f, 0.0f);
glDisable(GL_DEPTH_TEST);
glGenVertexArraysOES(1, &_vertexArray);
glBindVertexArrayOES(_vertexArray);
glGenBuffers(1, &_vertexBuffer);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBufferData(GL_ARRAY_BUFFER, sizeof(vertexData), vertexData, GL_DYNAMIC_DRAW);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, VERTEX_POS_DATA_SIZE, GL_FLOAT, GL_FALSE, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(0));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor, VERTEX_COLOR_DATA_SIZE, GL_FLOAT, GL_FLOAT, VERTEX_DATA_SIZE * sizeof(GLfloat), BUFFER_OFFSET(VERTEX_POS_DATA_SIZE * sizeof(GLfloat)));
glLineWidth(10.0);
}
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
if (!needsRedraw) return;
needsRedraw = NO;
glClearColor(0.65f, 0.65f, 0.65f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
[self.effect prepareToDraw];
glDrawArrays(GL_LINE_STRIP, 0, vertexCount);
}
He tratado de establecer la backgroundColor del a [UIColor clearColor] y ajuste de la eaglLayer a no ser opaco. Diablos, incluso intenté establecer el backgroundColor de eaglLayer en CGColorRef con 0 opacidad.
¿Estás seguro de que no estás rellenando el fondo de la escena en el momento de pintar la escena? Sé que suena tonto, pero he visto que le sucede a personas que intentaban hacer lo mismo. – mprivat
Soy completamente nuevo con esto, por lo que es posible, pero estoy 99% seguro de que solo estoy dibujando la tira de una línea. El color claro está configurado para tener un alfa de 0.0f, pero incluso he notado que si intento dibujar vértices cuyos atributos de color establecen el alfa en 0.0f, aún dibujan. ¿Tiene sentido o te ayuda a hacer una lluvia de ideas? – prplehaze
Un comentario que podría hacer aquí es que evitaría usar una vista de alojamiento de OpenGL ES no opaca si puede. Esto ralentizará dramáticamente su renderizado en comparación con una vista opacidad normal de OpenGL ES. Si puede, extraiga el contenido de fondo que desea procesar dentro de su escena OpenGL ES y visualice todo eso en una vista opaca. –