Come trasformare un grafico 3D in qualcosa guardabile su un televisore 3D?


9

Diciamo che ho un diagramma a dispersione 3D in R o un frame di dati con 3 campi pieni di dati numerici.

Come può essere "trasformato" in "qualcosa" guardabile su un televisore 3D (come un televisore a grande schermo casuale di Samsung che utilizza occhiali con otturatore)? O una clip statica di quel diagramma a dispersione che ruota attorno ad un asse o ancora meglio essere in grado di interagire con il diagramma (spostarlo, ruotarlo, ...). Di quali programmi e librerie hai bisogno per farlo?

(Ho appena sollevato R perché è lì che il lavoro è fatto. Ma una soluzione non dovrebbe necessariamente includere R)


1
Se hai già la rappresentazione 3D della trama, tutto ciò che serve è creare almeno due viste da essa. Queste viste devono differire in ciò che mostrano per un importo minimo. Quindi, se la tua "macchina fotografica" guardasse la trama da un'angolazione, sposta leggermente la videocamera verso sinistra o verso destra per ottenere una seconda vista.
slhck,

1
E poi devi codificare le immagini in una sorta di video multi-view che la TV è in grado di gestire, ad esempio H.264 MVC o split stereo - hai qualche dettaglio in merito?
slhck,

@slhck: non ne ho davvero la rappresentazione 3D. Posso solo averlo visualizzato con R in 3D. Anche l'uso di due prospettive della telecamera su una rappresentazione VRML potrebbe ostacolare l'interazione con la trama. Come regolare le scale o usare dati diversi. : /
Raffael,

1
Oh, capisco. Bene, sarà complicato. Avresti bisogno di una grafica renderizzata in grado di produrre un vero 3D dalla scheda grafica del tuo computer (ad esempio una NVIDIA con un kit di visione 3D), ma non sono a conoscenza di una cosa del genere.
slhck,

1
È necessaria una scheda grafica in grado di produrre 3D (come la già citata NVIDIA e visione 3D) e quindi un programma che mostri i tuoi dati in un viewport 3D con accelerazione hardware (simile a un videogioco). Processing (processing.org) potrebbe aiutarti in questo senso.
malsane

Risposte:


1

Potresti generare due immagini (per gli occhi sinistro e destro) per ogni fotogramma dell'animazione, impostarle una accanto all'altra (per creare un'immagine molto ampia o una compressa in orizzontale) e generare un file video in questo modo . Quindi inserisci quel file su un'unità USB e collegalo a una moderna TV 3D, e nel suo menu 3D, dovresti trovare un'opzione "side-by-side" o "SBS" che capirà come visualizzare l'immagine. (Cerca su YouTube "GoPro 3D" per molti esempi.)

Potresti essere in grado di fare lo stesso con un computer collegato alla TV come monitor, ma le parti non 3D del desktop dovrebbero essere nascoste poiché non sarebbero duplicate per ogni occhio (e sembrerebbero strane).

Nota: se colleghi un computer a uno schermo 3D in modalità SBS, ti sarà utile chiudere un occhio alla volta mentre navighi per iniziare la presentazione.


0

Davvero hai solo bisogno di plot3d () spinnable , dal pacchetto rgl .

  1. Inizia l'orientamento della trama in una posizione particolare e normale.
  2. Crea due istanze del grafico di base, ruotate leggermente in direzioni opposte (per una vista simile a un obiettivo completamente centrato) o ingrandite e rimpicciolite rispettivamente (per una vista 3D più standard)

    X. Tinge la trama più lontano più blu, ugualmente tinge la trama più vicina più rossa.

  3. In realtà non visualizza il grafico di base. Utilizzare preferibilmente la base per calcolare un quadruplo buffer (o doppio buffer) alternando quale dei due grafici di offset è visualizzato in ciascun fotogramma. Aggiornalo ad ogni ciclo di disegno. Visualizza contemporaneamente ogni diagramma di istanza dopo l'aggiornamento.
  4. Utilizzando un timer ad alta risoluzione o VSync, riprodurre lo stack buffer esattamente alla frequenza di aggiornamento del dispositivo con gli occhiali.
  5. Speriamo che la frequenza di aggiornamento sia configurabile nella tua app, oltre all'opzione per 'saltare il prossimo fotogramma' per sincronizzarti con gli occhiali con otturatore. (per invertire la sincronizzazione sinistra / destra)
  6. Prima di aggiornare il grafico di base, scansionare l'input per il feedback degli utenti, potenzialmente da un buffer di input riempito in modo asincrono.
  7. Collega un laptop o un piccolo dispositivo Linux al televisore con HDMI lol.
  8. Bonus: se vuoi davvero approfondire, potresti usare Rcpp e GLFW insieme per gestire la follia di joystick / mouse / gamepad.

C'è una breve descrizione di rgl e un pacchetto simile per le trottole 3D, che può essere visto alla fine di questo post .

Se puoi, ti consigliamo di posizionare una sorta di effetto di sfocatura guidato dalla prospettiva semplicemente su ogni grafico usando OpenGL. Certo, probabilmente dovrai fare un po 'di modifica con gli angoli per farlo bene. Se ricordo che dovrebbe essere un angolo <20 gradi, ... ma chi lo sa, non io!


no scusa. So che rgl e rgl supportano l'anaglifo 3D dalla scatola. Cito gli occhiali con otturatore per un motivo. ma grazie comunque;)
Raffael

@ Яaffael whoops! in realtà non l'ho visto sugli occhiali con otturatore a causa della lettura troppo rapida. Scusatemi per questo, ho aggiunto alcune correzioni.
Garet Claborn,

Potresti anche essere in grado di utilizzare R con interoperabilità OpenCL / GL per ottenere il buffering e disporre di un servizio separato di sola scrittura nei buffer di input, che consente alla tua app di accedere in sola lettura. (Quindi è anche necessario il contrario per inviare un messaggio al servizio molto rapidamente dopo aver letto un input) O in modo molto simile, basta che la tua app crei i buffer e pubblichi i vertici su OpenCL e C ++ / OpenGL / OpenCL renderer che corre lungo lato.
Garet Claborn,

Ho eliminato la mia domanda perché ricevo troppe risposte non pertinenti (come la tua finora :) ma sei invitato ad aggiornarlo.
Raffael,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.