Альтернативы созданию текстуры OpenGL из захваченного видео кадра для наложения OpenGL View на видео? (iPhone)

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

Вопрос

Это в основном актуально для приложений типа дополненной реальности. Apple предоставляет информацию о том, как захватить видео кадры (и сохранить их в виде изображений, если это необходимо) с помощью AvcaptureSession здесь:

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

Я знаю, что можно создать текстуру OpenGL из захваченной видео кадры, а затем использовать ее в качестве фона в представлении OpenGL, на который можно наложить другую графику.

Мне интересно, есть ли какие -либо альтернативы этому методу? Метод, упомянутый выше, может быть лучшим (я не знаю, есть ли это), но если есть альтернативы, чтобы попробовать, было бы неплохо знать. Например, есть ли способ наложить представление OpenGL непосредственно на AvCaptureVideOpreViewLayer?

Это было полезно?

Решение

Вы действительно можете сложить контент OpenGL на что -то вроде AvCaptureVideoPreviewLayer, но ваша производительность пострадает. Apple настоятельно рекомендует вам не налагать контент OpenGL ES, не являющийся незаке, поверх других элементов дисплея. От Руководство по программированию OpenGL ES для iOS:

Для абсолютной лучшей производительности, ваше приложение должно полагаться исключительно на OpenGL, чтобы отобразить ваш контент. Для этого размер вид, который удерживает ваш объект Caeagllayer, чтобы соответствовать экрану, установите его непрозрачное свойство на да и убедитесь, что другие основные анимационные слои или представления не видно. Если ваш слой OpenGL ES составлен над другими слоями, то, что ваш объект Caeagllayer непрозрачным уменьшается, но не устраняет стоимость производительности.

Если ваш объект Caeagllayer смешан поверх слоев под ним в иерархии слоя, данные о цвете renderbuffer должны быть в предракаемом альфа -формате, который должен быть правильно композиции путем основной анимации. Смешивание контента OpenGL ES поверх другого контента имеет серьезный штраф за производительность.

Честно говоря, на самом деле не так сложно втянуть в видео в виде текстуры, а затем отображать это как рекламный щит за вашим трехмерным наложением. Мое пример приложения здесь Сделает видео с камерой видео на текстуру OpenGL ES (2.0) для отображения на экране. С лишь несколькими модификациями, вы можете поместить 3-D контент поверх этого. Это даст вам гораздо лучшую производительность, чем попытка нарисовать 3-D-контент, не подходящий на вершине AvCaptureVideoPreviewLayer.

Однако, если вы просто хотите отобразить простые статические uiviews над контентом OpenGL ES, это может быть сделано без особого штрафа на производительность (снижение кадров в кадре в моем опыте).

Другие советы

Конечно, взгляды могут быть наложены вместе, независимо от контента. Слоирование GL по видео ничем не отличается от наслоения 2D по сравнению с 2D.

Почти единственный улов - это то, что вам нужно отображать контент GL, чтобы произведенное изображение было предсказано Alpha (как и все другие прозрачные контенты на iOS, предсказано).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top