Alternativas a la creación de una textura de OpenGL de un fotograma de vídeo capturado para superponer una vista OpenGL a través de vídeo? (IPhone)

StackOverflow https://stackoverflow.com/questions/4473894

Pregunta

Esto es sobre todo relevante para aplicaciones de tipo de realidad aumentada. Apple proporciona información sobre la forma de marcos de captura de vídeo (y guardarlas como imágenes si es necesario) con AVCaptureSession aquí:

http://developer.apple.com/library/ios /#qa/qa2010/qa1702.html

Sé que es posible crear una textura de OpenGL a cabo un fotograma de vídeo capturado y luego usar eso como un fondo en la vista OpenGL sobre el que superponer otros gráficos.

Me gustaría saber si hay alguna alternativa a este método? El método antes mencionado puede ser la mejor (no sé si lo es) pero si hay alternativas para tratar de que sería bueno saber. Por ejemplo, hay una manera de superponer el OpenGL ver directamente sobre el AVCaptureVideoPreviewLayer?

¿Fue útil?

Solución

Si lo necesitas puedes capa de contenido OpenGL por algo como AVCaptureVideoPreviewLayer, pero su rendimiento se resentirá. Manzana recomienda encarecidamente que no superposición de contenido OpenGL ES no opaca en la parte superior de los otros elementos de la pantalla. Desde el OpenGL ES Guía de Programación para iOS :

Para el mejor rendimiento absoluto, su aplicación debe depender solamente de OpenGL ES para hacer su contenido. A hacer esto, el tamaño de la vista que tiene su CAEAGLLayer objeto para que coincida con el pantalla, establezca su propiedad opaca a SÍ, y garantizar que ningún otro Core capas de animación o vistas son visibles. Si composited la capa de OpenGL ES por encima de otras capas, haciendo que su CAEAGLLayer objeto opaco reduce pero no elimina el desempeño costo.

Si el objeto se mezcla CAEAGLLayer en la parte superior de las capas por debajo de ella en el jerarquía de capas, la renderbuffer es datos de color deben estar en un premultiplicado formato alfa para estar compuesto correctamente por Core Animation. Mezcla contenido OpenGL ES en la parte superior de otro contenido tiene una actuación severa penalti.

En serio, realmente no es tan difícil de lograr en el video como una textura y luego mostrar que como una valla publicitaria detrás de la superposición de 3-D. Mi aplicación de ejemplo aquí hace paso a través de la cámara de vídeo a un OpenGL ES (2,0 ) textura para la visualización de la pantalla. Con sólo unas pocas modificaciones, es posible colocar el contenido en 3-D por encima de eso. Esto le dará un rendimiento mucho mejor que tratar de dibujar no opaca contenido en 3-D en la parte superior de un AVCaptureVideoPreviewLayer.

Sin embargo, si usted está esperando para mostrar UIViews estáticas sencillas sobre el contenido de OpenGL ES, que se puede hacer sin gran parte de una penalización de rendimiento (~ 5% de reducción en la tasa de fotogramas en mi experiencia).

Otros consejos

Por supuesto, las vistas se pueden superponer entre sí, independientemente de su contenido. Estratificación sobre GL vídeo no es diferente de capas 2D sobre 2D.

Casi el único inconveniente es que se necesita para hacer que su contenido de GL para que la imagen producida es premultiplicado por la alfa (al igual que el resto del contenido transparente en IOS se premultiplicado).

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