Como transformar um gráfico 3D em algo assistível em uma televisão 3D?

9

Digamos que eu tenha um gráfico de dispersão 3D em R ou um quadro de dados com 3 campos preenchidos com dados numéricos.

Como isso pode ser "transformado" em "algo" assistível em uma televisão 3D (como uma TV de tela grande aleatória da Samsung usando óculos de proteção do obturador)? Um clipe estático desse gráfico de dispersão girando em torno de um eixo ou ainda melhor para poder interagir com o gráfico (mova-o, gire-o ...). Quais programas, bibliotecas você precisa para fazer isso?

(Acabei de criar R porque é onde o trabalho é feito. Mas uma solução não seria necessária para incluir R)

Raffael
fonte
1
Se você já possui a representação 3D do gráfico, tudo o que precisa é criar pelo menos duas visualizações a partir dele. Essas visões devem diferir no que mostram em uma quantidade mínima. Portanto, se a sua "câmera" olhar para a plotagem de um ângulo, você levemente deslocará a câmera para a esquerda ou direita para obter uma segunda visão.
slhck
1
E então você precisa codificar as imagens para algum tipo de vídeo de exibição múltipla que a TV possa suportar, por exemplo, H.264 MVC ou split stereo - você tem alguma especificação específica?
slhck
@slhck: Eu realmente não tenho a representação 3D dele. Eu só posso exibi-lo com R em 3D. O uso de duas persectivas de câmera em uma representação VRML talvez prejudique a interação com o enredo. Como ajustar as escalas ou usar dados diferentes. : /
Raffael 28/11
1
Ah eu vejo. Bem, isso vai ser complicado. Você precisaria de gráficos renderizados que possam produzir 3D real a partir da placa gráfica do seu computador (por exemplo, uma NVIDIA com um kit de visão 3D), mas não conheço isso.
slhck
1
Você precisa de uma placa de vídeo que possa gerar 3D (como a já mencionada visão NVIDIA e 3D) e, em seguida, de um programa que exiba seus dados em uma viewport 3D acelerada por hardware (semelhante a um videogame). Processing (processing.org) pode ajudá-lo nesse sentido.
evilspoons

Respostas:

1

Você pode gerar duas imagens (para os olhos esquerdo e direito) para cada quadro de sua animação, configurá-las lado a lado (para criar uma imagem muito ampla ou comprimida horizontalmente) e gerar um arquivo de vídeo dessa maneira . Em seguida, coloque esse arquivo em uma unidade USB e conecte-o a uma TV 3D moderna. No menu 3D, você encontrará uma opção "lado a lado" ou "SBS" que entenderá como exibir a imagem. (Pesquise no YouTube "GoPro 3D" para vários exemplos.)

Você pode fazer o mesmo com um computador conectado à TV como monitor, mas as partes não 3D da área de trabalho precisariam ser ocultas, pois não seriam duplicadas para cada olho (e pareceriam estranhas).

Nota: Se você conectar um computador a uma tela 3D no modo SBS, será útil fechar um olho de cada vez enquanto estiver navegando para iniciar sua apresentação.

sburlappp
fonte
0

Realmente você só precisa de plot3d () spinnable, do pacote rgl .

  1. Inicie a orientação do seu gráfico em algum local normal em particular.
  2. Crie duas instâncias do gráfico de base, girado levemente em direções opostas (para visualização totalmente centrada da lente) ou ampliado e diminuído levemente, respectivamente (para visualização 3D mais padrão)

    x. Tingir a plotagem mais longe, mais azul, tingir igualmente a plotagem mais próxima, mais vermelha.

  3. Na verdade, não exiba o gráfico de base. De preferência, use a base para calcular um buffer quádruplo (ou buffer duplo) alternando qual dos dois gráficos de deslocamento é exibido em cada quadro. Atualize-o a cada loop de desenho. Exiba simultaneamente cada gráfico de instância após a atualização.
  4. Usando um timer de alta resolução ou VSync, reproduza a pilha de buffers precisamente na taxa de atualização do seu dispositivo de obturador.
  5. Esperamos que a taxa de atualização seja configurável no seu aplicativo, além da opção de 'pular o próximo quadro' para sincronizar com os óculos do obturador. (para reverter a sincronização esquerda / direita)
  6. Antes de atualizar o gráfico de base, verifique a entrada para obter feedback do usuário, potencialmente de um buffer de entrada preenchido de forma assíncrona.
  7. Conecte um laptop ou dispositivo linux pequeno na TV com HDMI lol.
  8. Bônus: se você realmente quer entender tudo, você pode usar o Rcpp e o GLFW juntos para lidar com a loucura do joystick / mouse / gamepad.

Há uma breve descrição do rgl e um pacote semelhante para gráficos de fiação 3D, que podem ser vistos no final desta postagem .

Se puder, você deseja colocar algum tipo de efeito de desfoque orientado a perspectiva apenas visualmente em cada plotagem usando o OpenGL. Claro, você provavelmente terá que fazer alguns ajustes nos ângulos para acertar. Se bem me lembro, deveria ser um ângulo <20 graus, ... mas quem sabe, não eu!

Garet Claborn
fonte
não desculpe. Eu sei que rgl e rgl suporta anaglyph 3D da caixa. Menciono os óculos do obturador por um motivo. mas obrigado de qualquer maneira;)
Raffael
@ Ffaffael whoops! realmente não vi isso nos óculos do obturador devido à leitura muito rápida. Desculpe por isso, adicionou algumas correções.
Garet Claborn
Você também pode usar R com interoperabilidade OpenCL / GL para obter buffer e ter um serviço separado somente para gravação nos buffers de entrada, dando ao aplicativo acesso somente leitura a ele. (Também é necessário o inverso para enviar uma mensagem de volta ao serviço muito rapidamente após a leitura de uma entrada). Ou, da mesma forma, faça com que seu aplicativo faça os buffers e publique os vértices no renderizador OpenCL e C ++ / OpenGL / OpenCL em execução lado.
Garet Claborn
Excluí minha pergunta porque recebo muitas dessas respostas não relevantes (como a sua até agora :), mas você pode atualizá-la.
Raffael