Как вывести 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, что вы должны использовать асимметричное смещение усеченного конуса, а не вращение сцены, чтобы генерировать точки обзора для правого и левого глаза.