Как вывести 3D-изображения на свой 3D-телевизор?

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

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

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

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

2 ответа

Решение

Основная проблема заключается в том, чтобы заставить ваш графический процессор отправлять стереоскопический формат. В случае подключения HDMI это не будет работать без помощи драйвера. Если у вас GPU профессионального уровня (Quadro, FireGL), то они, скорее всего, поддерживают Quadbuffers 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: черт, я парень, который в одиночку стереографировал " Слоновий сон", представил его и получил награду на фестивале 3D-фильмов.

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

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

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

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

Другие вопросы по тегам