Gestire video 3D

comunque ti dico per esperienza (possessore di un nvidia 3d vision kit con schermo samsung syncmaster 2233) che se gli schermi per il 3D partono da 100Hz e che se uno schermo normale oscilla tra i 60 e i 75Hz il motivo è che se scendi sotto i 50Hz per occhio ti si affatica la vista e ti provoca un gran mal di testa dopo anche una sola ora (indifferentemente dalla profondità che dai all'immagine stereoscopica).

se proprio vuoi fare un 3D in casa per un portatile utilizza una cosa chiamata barriera di parallasse che almeno non ti rovini gli occhi.

se però vuoi continuare devi usare una porta esterna, non credo che il tuo pc non abbia nemmeno una HDMI o DVI o VGA. Certo se fossi in grado di gestire le directx come nulla potresti farlo via software ma già il tempo necessario per comunicare via seriale e credo andresti out of sync
inoltre abilitare il v-sync riduce le prestazioni del gioco/programma

Ok ho più o meno capito quello che vuoi dire, mi domando se a questo punto una soluzione potrebbe essere che il plughin stesso si sincronizzi con gli occhiali ( è il plughin che alterna i 2 fotogrammi del formato Side-by-Side 3D )
ma cosi mi vengono in mente molti altri problemi.
Chi sta provando a farmi il plughin non sa nemmeno se farlo in c++ o in java ( stavamo giusto ragionandoci ora ) e non abbiamo la più pallida idea di come interfacciarlo con arduino.
Il plughin lo stiamo pensando per VLC.

però tocca essere molto bravi a scrivere software per pc e avere un'ottima conoscenza di Windows/Linux.

E anche di DirectX o similare secondo me :wink:

Chi sta provando a farmi il plughin non sa nemmeno se farlo in c++ o in java ( stavamo giusto ragionandoci ora ) e non abbiamo la più pallida idea di come interfacciarlo con arduino.

Se vuoi avere una chance per il plugin devi andare su C++ e NON si deve interfacciare con Arduino che il segnale lo deve prendere direttamente dalla VGA

comunque ti dico per esperienza (possessore di un nvidia 3d vision kit con schermo samsung syncmaster 2233) che se gli schermi per il 3D partono da 100Hz e che se uno schermo normale oscilla tra i 60 e i 75Hz il motivo è che se scendi sotto i 50Hz per occhio ti si affatica la vista e ti provoca un gran mal di testa dopo anche una sola ora (indifferentemente dalla profondità che dai all'immagine stereoscopica).

Io ho visto usare con un discreto successo anche con la frequenza di 60 Hz.
In ogni caso se avessi un ipotetica shcedavideo che arriva fino a 120 l'intero dispositivo si adaterebbe alla nuovo frequenza.
Il progetto e pensato solo per la visualizazioni di video.

flz47655:
E anche di DirectX o similare secondo me :wink:

Domanda stupida cosa intendete per DirectX ?

o meglio ancora le openGL, così fai win, linux e mac :slight_smile:

Ok ho letto quello che riguarda il DirectX, è molto bella come cosa ma decisamente troppo complessa secondo me.
ora non mi rimane che riordinare le idee.
In ogni caso vorrei realizzare un programma su arduino per prendere il clock dal vsinc della presa vga ( lasciando per ora perdere la porta usb ) per poi mandarlo ai vari occhiali, cosi almeno potrò effettuare maggiori test.
Il dubbio che mi rimane ora è se riuscirò a creare il tanto agoniato plughin e nel caso riuscire a sincronizzarlo .

PROPOSITI FUTURI:
Spero di riuscire ad ottenere almeno un risultato accettabile e speriamo che il progetto prenda piede in maniera da poter essere sempre più sviluppato.

INTANTO:
Secondo voi questo codice va bene ? o si potrebbe quasi sicuramente renderlo più snello e veloce?

int VGAclock=0;
int SINCswic=0;

void setup(){
  
  pinMode ( 13, OUTPUT );  // il pin 13 e 12 servono per comandare gli occhiali tramite cavo non IR
  pinMode ( 12, OUTPUT );
  pinMode (8, INPUT);     // da qui faccio entrare il segnale di clock VGA
  pinMode (9, INPUT);     // interruttore per girare la fase
}

void loop() {
  VGAclock=digitalRead(8);
  SINCswic=digitalRead(9);
  
  if(VGAclock==HIGH , SINCswic==LOW ){
   digitalWrite(13,HIGH);
   digitalWrite(12,LOW);
  }
  else{
   digitalWrite(13,LOW);
   digitalWrite(12,HIGH);
  }
  
  if(VGAclock==HIGH , SINCswic==HIGH  ){
   digitalWrite(13,LOW);
   digitalWrite(12,HIGH);
  }
  else{
   digitalWrite(13,HIGH);
   digitalWrite(12,LOW);
  }

}

lesto:
o meglio ancora le openGL, così fai win, linux e mac :slight_smile:

Facile dire openGL ma in questo caso non si avrebbe qualcosa di molto portabile a meno di non scrivere codice specifico per le tre piattaforme, il VSYNC con la scheda video non è inclusa nelle specifiche principali ed è delegata alla piattaforma

Ciao

ah, non sapevo questo particolare, mi aspettavo che invece ci fosse un qualcosa.

@mango: direi che può andare bene, ma se usi le macro guadagni microsecondi preziosi, vedi Ready, Set, Oscillate! The Fastest Way to Change Arduino Pins « The Mind of Bill Porter

Ok recuperato pc con porta VGA, ora mi metto a provare a creare il circuito e a tampinare per vedere come sistamare la parte in c++ per vlc.

Leggiti le specifiche VGA prima di agganciarti alla porta. La massa deve essere in comune con Arduino.

Ciao

Si si lo so, è che non riesco a trovare la tensione di uscita del Vsync per capire se devo amplificarlo un pelo oppure no.

VSYNC se non ricordo male è a 5v quindi non serve amplificazione

OK il progetto sta andando avanti anche in C++ con questa libreria da assemblase SoC 2011/Stereoscopic Video - VideoLAN Wiki
se qualcuno fosse interressato a darmi una mano anche con questa parte questo è il link.
Ora ho anche bisogno di racogliere un pò di segnali IR dai vari tv per poterli copiare in arduino.
E anche qui ho bisogno della vostra mano, se potete intercettare i segnali con IRrecord e poi comunicarmi il codice e il modello del tv ve ne sarei grato :smiley:

esiste già una libreria arduino con i codici dei produttori più famosi, la IReciver mi pare, quindi la trovi e dal codice "rubi" i codici

Dove la trovo questa libreria ?

Grazie ora ci do una bella letta, intanto se qualcuno e interessato questo è il codice fatto fino ad ora.
Se avete consigli su come migliorarlo ditemi pure.

#include <IRremote.h>
IRsend irsend;
int VGAclock=0;
int SINCswic=0;
int IR=2;
int CR=0x20DFDF20; // inserisci dopo 0x il codice per il segnale R
int CL=0x20DFDF20; // inserisci dopo 0x il codice per il segnale L
void setup(){
  pinMode (7, INPUT);     // VGAclock da qui faccio entrare il segnale di clock VGA
  pinMode (6, INPUT);     // SINCswic interruttore per girare la fase
  pinMode (IR, OUTPUT);    // uscita led IR
  Serial.begin(9600);
}
void loop() {
  VGAclock=digitalRead(7);
  SINCswic=digitalRead(6);
    if(VGAclock==HIGH , SINCswic==LOW ){
   irsend.sendNEC(CR, IR); // inserisci dopo 0x il codice
  }
  else{
   irsend.sendNEC(CL, IR);
  }
    if(VGAclock==HIGH , SINCswic==HIGH  ){
   irsend.sendNEC(CL, IR);
  }
  else{
   irsend.sendNEC(CR, IR);
  }
}