9

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

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

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

2 ответа2

1

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

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

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

0

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .