Pregunta

Tengo una representación de escena opengl en una capa EAGLView y algunos otros elementos (círculos y demás) en una UIView (que es un hermano de EAGLView, colocado encima). ¿Es posible mezclar colores entre las dos capas? Me gustaría hacer una mezcla de diferencias para obtener un efecto de inversión en los colores de EAGLView.

He estado jugando con CGBlendMode pero solo parece afectar lo que estoy dibujando en esa vista actual. Creo que esto tiene algo que ver con el CGContext, pero estoy un poco confuso en los detalles, ¿puedo forzar que el UIView y el EAGLView tengan el mismo CGContext para que la combinación funcione entre ellos?

Se agradece la ayuda, las correcciones y las aclaraciones. Gracias por adelantado, -S

¿Fue útil?

Solución

La respuesta corta es que no puedes. La respuesta larga sigue.

Por EAGLView debe referirse a la subclase de UIView que se incluye en la plantilla OpenGL ES en Xcode. Lo que hace que esta clase sea especial es que el método de clase layerClass se anula y devuelve la clase CAEAGLLayer en lugar de la clase CALayer , como es predeterminado.

UIView y CALayer funcionan en pares. Todos los objetos UIView están respaldados por un CALayer , el CALayer es el objeto responsable del diseño y la representación en pantalla. UIView es un delegado de CALayer , y es responsable de dibujar sus gráficos cuando sea necesario.

CALayer permitirá que su delegado (el UIView ) se dibuje en un CGContextRef . Es un contexto por UIView , por lo que no puede usar CGBlendMode para combinar varias vistas, ya que solo funcionará dentro de un único contexto UIView.

La mezcla de CALayer se debe hacer usando las propiedades del filtro. Estos están definidos para el iPhone OS pero los filtros disponibles son no definidos de acuerdo con la documentación. Esto se debe a que Core Image no está disponible en el sistema operativo del iPhone en este momento.

Otros consejos

No creo que puedas mezclar colores en ese sentido. Lo mejor que puedes hacer es tener uno completamente oculto al otro, o tener la capa superior semitransparente (en cuyo caso, verás la parte inferior), pero no podrás hacer un dibujo de tipo XOR.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top