Alternativen zur Schaffung einer openGL Textur aus einem aufgenommenen Videorahmen einen openGL Blick auf Video zu überlagern? (IPhone)

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

Frage

Dies ist vor allem relevant für Augmented-Reality-Typ-Anwendungen. Apple stellt Informationen zur Erfassung Video-Frames (und speichern sie als Bilder, wenn nötig) mit AVCaptureSession hier:

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

Ich weiß, dass es möglich ist, eine openGL Textur aus einem aufgenommenen Video-Frame zu erstellen und dann die als Hintergrund in der openGL Ansicht, über die anderen Grafiken zu überlagern.

Ich frage mich, ob es irgendwelche Alternativen zu dieser Methode? Das oben genannte Verfahren kann die beste sein (ich weiß nicht, ob es ist), aber wenn es Alternativen gibt es zu versuchen, wäre gut zu wissen. Zum Beispiel ist es eine Möglichkeit, die openGL Ansicht direkt über die AVCaptureVideoPreviewLayer zu überlagern?

War es hilfreich?

Lösung

Sie können in der Tat OpenGL-Inhalte über so etwas wie AVCaptureVideoPreviewLayer Schicht, aber Ihre Leistung leiden. Apple empfiehlt dringend, dass Sie nicht Overlay nichtopaken OpenGL ES Inhalt auf andere Anzeigeelemente. Von der OpenGL ES Programming Guide für iOS :

Für die absolut beste Leistung, Ihre Anwendung sollte ausschließlich auf vertrauen OpenGL ES Ihre Inhalte zu machen. Zu Tun Sie dies, Größe der Ansicht, dass hält Ihre CAEAGLLayer Objekt entspricht die Bildschirm, stellen seine undurchsichtige Eigenschaft JA, und stellen Sie sicher, dass kein anderer Kern Animation Schichten oder Ansichten sichtbar sind. Wenn Ihre OpenGL ES Schicht Compositing ist auf den anderen Schichten, so dass Ihre CAEAGLLayer Objekt undurchsichtig reduziert aber beseitigt nicht die Leistung Kosten.

Wenn Ihr CAEAGLLayer Objekt blended auf der Oberseite der darunter liegenden Schichten in der Schichthierarchie ist der renderbuffer Farbdaten müssen in einer premultiplied sein alpha-Format zu Verbundteilchen richtig von Core Animation. Vermischung OpenGL ES Inhalt auf andere Inhalt hat eine starke Leistung Strafe.

Ehrlich gesagt, es ist wirklich nicht so schwer im Video als Textur zu ziehen und dann, dass hinter dem 3-D-Overlay als Billboard angezeigt werden soll. Meine Beispielanwendung hier tut Weitergabe der Kamera Video in einem OpenGL ES (2.0 ) Textur auf dem Bildschirm für die Anzeige. Mit nur wenigen Änderungen können Sie platzieren 3-D-Gehalt obendrein. Dies gibt Ihnen viel bessere Leistung als der Versuch, nicht-opaken 3-D-Gehalt auf der Oberseite eines AVCaptureVideoPreviewLayer zu ziehen.

Wenn Sie jedoch nur wollen, sind einfache statische UIViews über OpenGL ES Inhalte anzuzeigen, dass ohne viel von einer Leistungseinbuße kann getan werden (~ 5% ige Reduktion der Bildrate in meiner Erfahrung).

Andere Tipps

Natürlich können Ansichten zusammengeschichtet werden, unabhängig von Inhalt. Layering GL über Video ist nicht anders als 2D über 2D-Schichtung.

Gerade über die einzige Haken ist, dass Sie Ihren GL Inhalt machen müssen, damit das erzeugte Bild von alpha Premultiplied ist (genau wie alle anderen transparenten Inhalte auf iOS ist Premultiplied).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top