Как создать независимое от платформы 3D-видео на 3D-телевизоре через HDMI 1.4? - PullRequest
1 голос
/ 30 октября 2010

Я пишу интерактивную программу трехмерной визуализации в реальном времени, и в каждой точке программы я могу вычислить 2 изображения (растровые изображения), которые предназначены для трехмерного изображения, с помощью стереоскопии .

Как мне заставить мою программу отображать пары изображений таким образом, чтобы они выглядели 3D на 3D-телевизоре? Есть ли платформо-независимый способ сделать это? (Под платформой я имею в виду независимость от бренда GPU, операционной системы, поставщика 3D-телевизоров и т. Д.) Если нет, то что предпочтительнее - заблокировать с помощью GPU, ОС или 3D-телевизора?

Полагаю, мне нужно использовать кабель HDMI 1.4 с 3D-телевизором? HDMI 1.4 может кодировать стереоскопию параллельным методом. Но как отправить такой закодированный сигнал на монитор? Какие библиотеки я использую для такого рода вещей? Windows DirectShow?

Если DirectShow корректен, доступен ли кроссплатформенный эквивалент?

Если кто-нибудь спросит, да, я видел этот вопрос: Программная генерация стереоскопического выхода 3D-телевизора .

Однако поправьте меня, если я ошибаюсь, похоже, это не то, что я ищу. У меня нет программы OpenGL или Direct3D, которая генерирует полигоны, для которых карта Nvidia может выполнять импровизированную импровизированную стереоскопию, просто визуализируя сцену с двух слегка смещенных точек зрения и затем отображая эти 2 изображения на мониторе - моя программа уже имеет этих пар изображений и должен отображать их (а они не являются результатом рендеринга полигонов).

Кстати, я никогда раньше не занимался крупными мультимедийными программами и очень мало знаю о HDMI, Direct Show, 3D-телевизорах и т. Д., Поэтому извините, если какие-то части этого вопроса вообще не имели никакого смысла.

1 Ответ

1 голос
/ 04 января 2011

Так что оказалось (относительно) легко.

Кажется, что самый простой способ заставить пары стереоизображений отображаться в 3D - это включить полноэкранный режим, отобразить стереоизображения рядом и вручную настроить 3D-телевизор для одновременного 3D-кодирования. Обратите внимание, что вам может потребоваться изменить положение и / или масштабирование, чтобы левое / правое изображения выстроились правильно и отображались с правильным соотношением сторон.

Этот метод должен быть независимым от операционной системы и графического процессора. Вам просто нужно выбрать любую кроссплатформенную библиотеку, которая способна очень быстро отображать изображения на экране. Я использовал OpenGL. Я понятия не имею, является ли это злоупотреблением OpenGL и DirectShow является правильным инструментом. Но я посмотрел на примеры DirectShow SDK и не смог по-настоящему разобраться с ними (у меня практически нет опыта работы с Win32 / 64 API, который, как мне кажется, используется в примерах). Также DirectShow не является кроссплатформенным, так что .

Что я сделал, так это то, что у меня была функция paintGL (), которая вызывалась с определенной скоростью таймером, и каждый вызов вычислял левое и правое изображение, отображая оба рядом, выполняя некоторое позиционирование и масштабирование, чтобы соответствовать Экран соответственно. Короче говоря, не очень сложно создать независимый от платформы 3D-вывод, если вы готовы использовать простое кодирование, например, бок о бок, и позволить 3D-телевизору обрабатывать все остальное.

Дополнительное замечание, оглядываясь по сторонам, я также обнаружил, что у OpenGL была возможность предусмотреть интерфейс для стереоскопического контента. Очевидно, OpenGL поддерживает квадробуферинг (стереоскопию с двойной буферизацией). См. http://www.opengl.org/sdk/docs/man/xhtml/glDrawBuffer.xml для функции переключения между 4 буферами. Я не стал использовать его (и поэтому не могу подтвердить, что он подходит для конкретной задачи, которую я описал в моем вопросе выше), и я понимаю, что для этого требуется поддержка специальной видеокарты. Но я поставил здесь ссылку на случай, если она кому-нибудь пригодится.

...