Alternative per la creazione di una texture OpenGL da un fotogramma video catturato per sovrapporre una vista openGL sul video? (i phone)

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

Domanda

Questo è per lo più rilevante per applicazioni di tipo realtà aumentata. Apple fornisce informazioni su come fotogrammi video cattura (e salvarli come immagini se necessario) con AVCaptureSession qui:

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

Lo so che è possibile per creare una trama openGL un fotogramma video catturato e quindi utilizzare tale come sfondo nella vista openGL su cui sovrapporre altri elementi grafici.

mi chiedo se ci sono alternative a questo metodo? Il metodo di cui sopra può essere il migliore (non so se è), ma se ci sono alternative per cercare sarebbe bene sapere. Per esempio, c'è un modo per sovrapporre visualizzare l'openGL direttamente sopra l'AVCaptureVideoPreviewLayer?

È stato utile?

Soluzione

Si può infatti strato contenuti OpenGL sopra qualcosa come AVCaptureVideoPreviewLayer, ma le prestazioni ne soffriranno. Apple ha altamente consiglia di non sovrapposizione non opachi contenuti OpenGL ES in cima ad altri elementi di visualizzazione. Dal OpenGL ES Guida alla programmazione per iOS :

Per le migliori prestazioni in assoluto, l'applicazione dovrebbe basarsi unicamente su OpenGL ES per rendere il vostro contenuto. Per fare questo, la dimensione del parere che tiene il tuo oggetto CAEAGLLayer per abbinare il schermo, impostare la proprietà opachi ai SI, e garantire che nessun altro core strati di animazione o viste sono visibili. Se il vostro livello di OpenGL ES è mescolati in cima ad altri livelli, rendendo la vostra CAEAGLLayer oggetto opaco riduce ma non elimina le prestazioni costi.

Se l'oggetto è mescolato CAEAGLLayer in cima strati sottostanti nel gerarchia dei livelli, il renderbuffer è dati a colori devono essere in premoltiplicato formato da alfa mescolati correttamente da Core Animation. mescolanza contenuti OpenGL ES sopra altre contenuto ha una grave prestazioni penalità.

Onestamente, non è poi così difficile da tirare nel video come una trama e quindi visualizzare che, come un cartellone pubblicitario dietro la 3-D di sovrapposizione. La mia applicazione di esempio qui fa passthrough della videocamera a un OpenGL ES (2.0 ) tessitura per la visualizzazione sullo schermo. Con solo poche modifiche, è possibile inserire contenuti 3-D in cima a quello. Questo vi darà molto meglio delle prestazioni che cercare di attirare non-opaco contenuti 3-D in cima ad un'AVCaptureVideoPreviewLayer.

Tuttavia, se si sta semplicemente desideroso di visualizzare UIViews statici semplici oltre contenuto OpenGL ES, che può essere fatto senza molta di una penalizzazione delle prestazioni (~ riduzione del 5% nel framerate nella mia esperienza).

Altri suggerimenti

Certo, vista può essere stratificato insieme, indipendentemente dal contenuto. Stratificazione GL su video non è diverso da stratificazione 2D su 2D.

Quasi l'unico problema è che è necessario per rendere il vostro contenuti GL in modo che l'immagine prodotta viene premoltiplicato da alfa (proprio come tutti gli altri contenuti trasparente su iOS viene premoltiplicato).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top