Я создаю приложение с дополненной реальностью, которое использует как OpenGL (рендеринг трехмерных объектов), так и OpenCV (обнаружение маркера). На данный момент это в основном приложение OpenCV (визуализация вывода с использованием openCV). Если я хочу добавить рендеринг OpenGL, должен ли я изменить конечный рендерер на OpenGL или придерживаться OpenCV (OpenGL должен быть визуализирован в текстуру)? Какой из них более практичный? У кого-нибудь есть опыт по этому вопросу?
Целевое приложение — Android. Хотя я разрабатываю прототип в Windows.
Рассматривая случай рендеринга в текстуру с OpenGL и рисования с OpenCV: в этом случае у вас нет контроля над траекторией, OpenCV использует для рисования конечного изображения. Однако на случай, если вы пройдете glReadPixels
(используя передачу PBO) очень вероятно, что вы просматриваете две глубокие копии данных изображения, потенциально пересекая (узкую / -er) полосу пропускания системной шины. Это не эффективно. В случае, если вы будете использовать постоянно отображаемый буфер OpenGL и предполагать, что внутри OpenCV есть некоторая хитрость (не знаю, в этом ли дело), копий можно было бы избежать.
Однако, принимая во внимание принцип KISS, гораздо проще избежать обходов. Включение рендеринга OpenGL в OpenCV позволяет остальной части вашей программы «прокручивать» этот контекст OpenGL.
Поэтому я рекомендую включить бэкэнд OpenGL в OpenCV
Других решений пока нет …