Как вывести 3D-изображения на свой 3D-телевизор? - PullRequest
11 голосов
/ 26 июля 2011

У меня есть 3D-телевизор, и я чувствую, что уклоняюсь от своих обязанностей (как выродка), если бы я хотя бы не пытался заставить его отображать красивые 3D-изображения моего собственного творения!

I 'до этого я занимался базовым программированием на OpenGL, и поэтому я понимаю соответствующие концепции: предположим, что я могу сделать из себя простой тетраэдр или куб и заставить его вращаться;Как мне заставить мой 3D-телевизор отображать это изображение, ну, в общем, в 3D?

Обратите внимание, что я понимаю основы работы 3D (рендеринг одного и того же изображения дважды с двух разных углов, по одному для каждого глаза),у меня вопрос о том, как на самом деле это сделать (нужен ли мне SDK? и т. д.)

  • В моем телевизоре используется поляризация 3D, хотя я хочу, чтобы этот вопрос также относился кдругие 3D-технологии (если возможно)
  • Мой ноутбук имеет выход HDMI, который я собираюсь использовать для подключения к телевизору (имеет ли это какое-то значение по сравнению с использованием VGA / компонентного видеокабеля?)
  • В прошлом я экспериментировал с GLUT / OpenGL, однако, если это проще / реально реально сделать это, используя какую-то альтернативную технологию, то это прекрасно

Ответы [ 2 ]

7 голосов
/ 26 июля 2011

Основная проблема заключается в том, чтобы заставить ваш графический процессор отправлять стереоскопический формат.В случае подключения HDMI это не будет работать без помощи драйвера.Если у вас GPU профессионального уровня (Quadro, FireGL), то они, скорее всего, поддерживают квадбуферы OpenGL, т.е. вы получаете кадровые буферы для левого и правого глаза, как заднего, так и переднего:

glDrawBuffer(GL_BACK_LEFT);
render_left_eye();

glDrawBuffer(GL_BACK_RIGHT);
render_right_eye();

glDrawBuffer(GL_BACK); // renders to both eyes simultanously
render_screen_level_and_nonstereoscopic();

SwapBuffers();

К сожалению, четырехъядерный буфер OpenGLсчитается профессиональным материалом.

Вместо этого NVidia (по крайней мере) предоставляет обычную библиотеку стереоскопии и некоторые расширения для управления ею.Основная причина заключается в том, что общие фрагменты должны воспроизводиться только один раз, а затем отправляться в оба глаза с применением аппиративного параллакса.Однако, исходя из моего полупрофессионального опыта в области стереоскопии…, эти виды полу / автоматической стереоскопии просто не помогают.Стереоскопия требует жесткого контроля всего «производственного» трубопровода, иначе вы облажались.С Elephants Dream я зашел так далеко, что изменил основной код рендерера.

Я отправил людей на 3D-разработку в NVidia несколько сценариев, где вам нужен точный контроль над процессом стереоскопии, и я надеюсь, что они увидятОсвещение и доступ к стерео с четырьмя буферами также на оборудовании потребительского уровня.

Обратите внимание, что я понимаю основы работы 3D (рендеринг одного и того же изображения дважды с двух разных углов, по одному для каждого глаза)

На самом деле вы рендеритесь не под двумя разными углами, а со смещенным параллаксом и сдвигом объектива.В противном случае вы получите некоторое трапецеидальное / трапецеидальное искажение по горизонтали, которое очень, очень неприятно наблюдать (на самом деле, я теперь думаю, что в процессе стереоскопического рендеринга нужно слегка отклонить оптические оси - то есть сделать полностью вопреки тому, что было бы наивносделайте - и «больше» компенсируют смещением объектива, в настоящее время я готовлю небольшое исследование по этому поводу, но мне все еще нужно собрать группы тестирования и контроля).


1: черт, япарень, который в одиночку стереографировал Elephants Dream, сделал его и получил награду на фестивале 3D-фильмов .

0 голосов
/ 30 мая 2014

Поскольку у вас есть пассивный 3D-телевизор, вполне вероятно, что изображения для левого и правого глаз отображаются на альтернативных линиях сканирования. (или, возможно, на альтернативных пикселях в шахматном порядке)

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

Таким образом, вы можете избежать всего подхода с четырьмя буферизованными видеокартами / GL_BACK_LEFT / GL_BACK_RIGHT, описанного datenwolf. И вы хотите избежать такого подхода, так как я никогда не сталкивался с видеодрайвером, который направляет стереофонический 3D с четырьмя буферами на настоящий 3D-телевизор.

Я согласен с советом datenwolf, что вам следует использовать асимметричное смещение усеченного конуса вместо поворота сцены для создания точек обзора для правого и левого глаз.

...