Как превратить 3D-диаграмму в нечто, что можно смотреть на 3D-телевизоре?

9

Допустим, у меня есть трехмерный график рассеяния в R или фрейм данных с 3 полями, заполненными числовыми данными.

Как это можно «превратить» в «нечто», которое можно смотреть на 3D-телевизоре (например, случайный телевизор с большим экраном от Samsung, использующий очки для затвора)? Либо статический клип этого точечного графика, вращающегося вокруг оси, либо еще лучше возможность взаимодействовать с графиком (переместить его, повернуть, ...). Какие программы, библиотеки вам нужны для этого?

(Я только что поднял R, потому что это то, где работа сделана. Но решение не обязательно должно включать R)

Раффаэль
источник
1
Если у вас уже есть трехмерное представление графика, то все, что вам нужно, это создать как минимум два вида из него. Эти взгляды должны отличаться в том, что они показывают, на минимальную сумму. Таким образом, если ваша «камера» будет смотреть на график под одним углом, вы бы слегка сместили камеру влево или вправо, чтобы получить второй вид.
slhck
1
И затем вам нужно кодировать изображения в какое-то мультипросмотр видео, которое может обрабатывать телевизор, например, H.264 MVC или разделенное стерео - есть ли у вас какие-либо особенности по этому поводу?
slhck
@slhck: у меня действительно нет трехмерного представления этого. Я просто могу отобразить его с R в 3D. Кроме того, использование двух представлений камеры в представлении VRML может затруднить взаимодействие с сюжетом. Как настройка весов или использование других данных. : /
Рафаэль
1
А ну понятно. Ну, это будет сложно. Вам нужна визуализированная графика, которая может выводить фактическое 3D с видеокарты вашего компьютера (например, видеокарту NVIDIA с комплектом 3D Vision), но я не знаю об этом.
slhck
1
Вам нужна видеокарта, которая может выводить 3D (например, уже упоминавшиеся NVIDIA и 3D Vision), а затем программа, которая отображает ваши данные в 3D-окне с аппаратным ускорением (аналогично видеоигре). Обработка (processing.org) может помочь вам в этом отношении.
злые ложки

Ответы:

1

Вы можете сгенерировать два изображения (для левого и правого глаза) для каждого кадра вашей анимации, установить их рядом (чтобы получить очень широкое или горизонтально сжатое изображение) и сгенерировать видеофайл таким образом. , Затем поместите этот файл на USB-накопитель, подключите его к современному 3D-телевизору и загляните в его меню 3D, вы должны найти опцию «бок о бок» или «SBS», которая поймет, как отображать изображение. (Ищите на YouTube «GoPro 3D», чтобы найти множество примеров.)

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

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

sburlappp
источник
0

На самом деле вам просто нужен spinnable plot3d () из пакета rgl .

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

    Икс. Оттяните график еще дальше, больше синего цвета, так же, как оттенок ближе, более красный.

  3. На самом деле не отображать базовый сюжет. Предпочтительно использовать базу для вычисления четырех буферов (или двойного буфера), чередуя, какой из двух смещенных графиков отображается в каждом кадре. Обновляйте его каждый цикл прорисовки. Одновременно отображать каждый экземпляр графика после обновления.
  4. Используя таймер с высоким разрешением или VSync, воспроизведите стек буфера точно с частотой обновления данного устройства с затворными очками.
  5. Надеемся, что частота обновления настраивается в вашем приложении, а также опция «пропустить следующий кадр» для синхронизации с очками затвора. (для обратной синхронизации влево / вправо)
  6. Перед обновлением базового графика просканируйте входные данные для обратной связи с пользователем, возможно, из асинхронно заполненного входного буфера.
  7. Подключите ноутбук или небольшое устройство Linux к телевизору с помощью HDMI LOL.
  8. Бонус: если вы действительно хотите приступить к этому, вы можете использовать Rcpp и GLFW вместе, чтобы справиться с безумием джойстика / мыши / геймпада.

Существует краткое описание rgl и аналогичного пакета для 3D-графиков, которое можно увидеть в конце этой публикации .

Если вы можете, вы захотите разместить какой-то эффект размытия, управляемый перспективой, просто визуально на каждом графике, используя OpenGL. Конечно, вам, вероятно, придется немного подправить углы, чтобы все было правильно. Если я вспоминаю, угол должен быть <20 градусов ... но кто знает, не я!

Гарет Клаборн
источник
нет извини. Я знаю, что rgl и rgl поддерживают анаглиф 3D из коробки. Я упоминаю защитные очки по причине. но все равно спасибо;)
Раффаэль
@ Яаффель ой! на самом деле не видел, что о очки затвора из-за слишком быстрого чтения. Извините за это, добавил некоторые исправления.
Гарет Клаборн
Вы также можете использовать R с взаимодействием OpenCL / GL для достижения буферизации и иметь отдельный сервис только для записи во входные буферы, предоставляя вашему приложению доступ только для чтения к нему. (Тогда вам также понадобится обратное, чтобы очень быстро отправить сообщение обратно в службу после прочтения ввода). Или очень похоже, просто сделайте, чтобы ваше приложение создавало буферы и отправляло вершины в OpenCL и C ++ / OpenGL / OpenCL рендерер, работающий вдоль сторона.
Гарет Клаборн
Я удалил свой вопрос, потому что я получаю слишком много таких не релевантных ответов (как и ваш до сих пор :), но вы можете обновить его.
Раффаэль