Alternatives à la création d'une texture openGL à partir d'une image vidéo capturée superposer une vue openGL sur la vidéo? (IPhone)

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

Question

Il est surtout utile pour les applications de type réalité augmentée. Apple fournit des informations sur la façon de capturer des images vidéo (et enregistrer les images en cas de besoin) avec AVCaptureSession ici:

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

Je sais qu'il est possible de créer une texture openGL une image vidéo capturée puis utiliser comme un arrière-plan dans la vue openGL sur lequel les superpositions graphiques.

Je me demande s'il y a des alternatives à cette méthode? La méthode mentionnée ci-dessus peut être le meilleur (je ne sais pas si elle est) mais s'il existe des alternatives pour essayer il serait bon de savoir. Par exemple, est-il un moyen de superposer l'openGL vue directement sur le AVCaptureVideoPreviewLayer?

Était-ce utile?

La solution

Vous pouvez en effet la couche OpenGL contenu sur quelque chose comme AVCaptureVideoPreviewLayer, mais votre performance souffrira. Apple recommande fortement que vous ne overlay contenu OpenGL ES non-opaque sur d'autres éléments d'affichage. De la OpenGL ES Guide de programmation pour iOS :

  

Pour la meilleure performance absolue,   votre application doit se fonder uniquement sur   OpenGL ES pour rendre votre contenu. À   faire, la taille de la vue qui tient votre   objet CAEAGLLayer pour correspondre à la   écran, définissez sa propriété opaque à   OUI, et veiller à ce qu'aucun autre noyau   couches d'animation ou vues sont visibles.   Si votre couche OpenGL ES est composited   sur d'autres couches, ce qui rend votre   CAEAGLLayer objet opaque réduit mais   ne supprime pas les performances   coût.

     

Si votre objet CAEAGLLayer est mélangé   au-dessus des couches, il en dessous de la   hiérarchie de couches, la renderbuffer est   les données de couleur doivent être dans un prémultipliée   le format alpha à composited   correctement par Core Animation. Mélange   contenu OpenGL ES sur d'autres   le contenu a une performance sévère   pénalité.

Honnêtement, il est vraiment pas difficile à tirer dans la vidéo comme une texture, puis afficher que comme un panneau publicitaire derrière votre overlay 3-D. Mon exemple d'application de passthrough-t vidéo de la caméra à un (OpenGL ES 2.0 ) texture pour l'affichage à l'écran. Avec seulement quelques modifications, vous pouvez placer le contenu 3-D en plus de cela. Cela vous donnera beaucoup de meilleures performances que d'essayer de tirer non-opaque teneur en 3-D sur le dessus d'un AVCaptureVideoPreviewLayer.

Cependant, si vous êtes désireux juste pour afficher simples UIViews statiques sur le contenu de OpenGL ES, qui peut se faire sans beaucoup d'une pénalité de performance (~ 5% de réduction de framerate dans mon expérience).

Autres conseils

Bien sûr, les vues peuvent être couches ensemble, quel que soit le contenu. GL vidéo sur Layering est pas différent de superposition 2D sur 2D.

À peu près le seul hic est que vous devez rendre votre contenu de GL afin que l'image produite est prémultipliée par alpha (comme tout autre contenu transparent sur iOS est prémultipliée).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top