Gestire video 3D

cyberhs:
Eventualmente puoi anche usare un LM1881

Non serve a nulla visto che il segnale della VGA è di tipo RGB con i sincronismi separati.

BaBBuino:
A te serve solo un segnale di sincronismo per agganciare lo schetch di Arduino con il refresh della pagina video. In pratica ti serve il V-Sync.

Purtroppo non è così semplice, il V-Sync ti riporta solo quando inizia un nuovo frame, per il 3D hai bisogno di sapere anche se è il frame di destra oppure quello di sinistra, ovvero non è possibile ottenere il 3D partendo dal segnale VGA, serve una apposita scheda che va messa sul bus pci e deve essere supportata dal player/game altrimenti niente 3D.

Grazie per la tempestiva risposta, :astonished: per quanto riguarda l'uscita vga so che posso sincronizzare arduino con quel segnale, è gia stato fatto e sembra con buoni risultati.
Il problema è che non ho quel uscita sul pc quindi volevo fare tutto usb ( anche per una maggiore flessibilita e semplicita a livello di saldature ) .
Per quanto riguarda il sincrono sinistro destro non è un problema, o meglio è risolvibile con una facile scappatoia:
Il video comincia con una sequenza ( credo che faro di 10 sec ) con dei freim alternati con scritto R e L, cosi facendo si puo successsivamente invertire la sequenza di otturazione per regolarne la stereoscopia ( basta un pratico pulsante ).
Cosa non detta al inizio il progetto teoricamente puo gia funzionare cosi, ma per esserne più sicuri e renderlo più semplice possibile per chi volesse provarci sto progettando un programma in c++ ( plughin per vlc) che alterni i fotogrammi R L di un formato Side-by-Side 3D usando ovviamente come master clok il sistema di aggiornametno della scheda video.
Grazie ancora delle tempestive risposte.

Una cosa è certa però: l'Inglese non è il tuo forte eh! :smiley:

no :roll_eyes:

fico ma io sapevo che a il monitor/televisore deve essere di almeno 120Hz per avere un buon risultato..

Ci sono varie frequenze a cui si puo lavorare, ovviamente a 120 il risultato è migliore ma anche a 60 ... mi spiego meglio:
Se si pensa che nel formato americano NTSC i fotogrammi si alternano a pocomeno di 30 al secondo, e in quello italiano PAL i fotogrammi sono a 25 i conti sono facili da fare.
In buona sostanza in un secondo devi alternare dai 25 ai 30 fotogrammi per occhio quindi da 50 a 60 fotogrammi al secondo per avere l'inlusione di un immagine stereoscopica.
In ogni caso la velocita puoi successivamente cambiarla in base alla frequenza che imposti nella scheda video, la mia si ferma a 60 ma tranquillamente ora trovi schede che vanno fino a 120.

Non devo collegare uno schermo esterno al mio pc per vedere in 3d, vorrei usare lo schermo del mio poratile.
Vi prego ditemi che e possibile prelevare il clock di aggiornamento della scheda video senza prenderlo dalla porta VGA =(

*******, da dove vorresti prenderlo "dentro" il portatile, quel segnale?

Se intendi la frequenza di aggiornamento del monitor la risposta è si, in pratica devo mandare un segnale ogni volta che il monitor si agiorna

credo che mango intenda intercetarlo via sofware e inviare un impulso via usb/seriale all'arduino, giusto? CREDO sia fattibile, ma non sono sicuro sia semplice

devi spiegarti bene, mango, altrimenti sembra che vuoi che magicamente l'arduino sappia che il monitor si è refreshato.

Avete ragione vi chiedo scusa a tutti se mi spiego un po' male, non sono troppo pratico di queste cose, so la teoria ma la pratica mi manca.
In ogni caso Lesto ha ragione, voglio intercettare la frequenza di aggiornamento del monitor per sincronizzarci gli occhiali.
Il problema è che non so in pratica come si fa.

Il software è molto semplice, praticamente ogni ambiente ti permette di gestire un evento che si scatena al ridisegno dello schermo
Anche se WPF non è l'ambiente più adatto per questo genere di cose perché il thread di rendering e di UI sono separati ecco un esempio di programma:

        public MainWindow()
        {
            InitializeComponent();
            CompositionTarget.Rendering += new EventHandler(CompositionTarget_Rendering);
        }        
        long ticks = 0; // 1 tick = 100ns = 0.1uS = 0.0001mS
        // 60Hz = 16.6ms = 166.000 ticks
        void CompositionTarget_Rendering(object sender, EventArgs e)
        {
            TimeSpan t = (e as RenderingEventArgs).RenderingTime;
            long diffTicks = t.Ticks - ticks;
            textBlock1.Text = diffTicks.ToString(); // Aggiungere un textBlock alla Window
            ticks = t.Ticks;            
        }

La funzione CompositionTarget_Rendering viene chiamata prima del rendering e sarà visualizzato a schermo un numero prossimo a 166.000 che equivale a 60Hz. Non si ha il valore preciso per la limitazione detta prima, se ci si aggiunge una trasmissione seriale si va inevitabilmente fuori sincronia se non si ha una comunicazione molto veloce.

Utilizzando DirectX o altri ambienti la situazione migliora anche se personalmente prenderei il segnale dalla VGA, alla fine fai prima

Ciao

mango:
Avete ragione vi chiedo scusa a tutti se mi spiego un po' male, non sono troppo pratico di queste cose, so la teoria ma la pratica mi manca.
In ogni caso Lesto ha ragione, voglio intercettare la frequenza di aggiornamento del monitor per sincronizzarci gli occhiali.
Il problema è che non so in pratica come si fa.

senza offesa ma ci risiamo

voglio intercettare la frequenza di aggiornamento del monitor per sincronizzarci gli occhiali

allora usa il sistema della VGA

tu forse intendi

voglio intercettare via software sul PC la frequenza di aggiornamento del monitor per comunicarla tramite seriale all'arduino che la comunicherà tarmite (?bho, bluetooth? perche non usi direttamente una chiavetta) agli occhiali (o sono gli occhiali che con arduino rivevono il seganel?

Ciao flz47655 grazie 1000 per la risposta e del codice fornito. :slight_smile:
Scusami se ti faccio un po' di domande ( anche banali ) sul suo funzionamento ma voglio capire ed imparare:
1 Cosa è DirectX ?
2 Come funziona il codice? e cosa vuole dire ogni singola riga?, lo chiedo per capire meglio come ragiona e poterlo implementare al codice che sto abozzando.
3 Cosa intendi per ambiente WPF?
4 Questo programma può essere lanciato solo dal compilatore arduino o basta attaccare la scheda al pc e si sincronizza da solo ?
5 Il programma mi da errore sketch_mar15b:-1: error: expected unqualified-id before 'public'

Scusami ancora Lesto se non mi faccio capire bene, io voglio comunicare via IR a dei normali occhiali 3d attivi quando cabiare oturatore, il fatto è che ne esistono di vari tipi oltre a quelli governati via infrarossi, ci sono anche quelli che si collegano tramite un semplice cavo jack 3.5 il software che sto cercando di creare deve poter gestire tutte e 2 le cose.
Ribadisco il fatto che non so come sia possibile prendere questo segnale dal pc se ci deve essere un programma interno al computer per inviarlo ad arduino o se basta collegarlo al pc e se lo trovi lui ( non ho la presa VGA ).
io so come ragionano entrambi i modelli quindi per quello so arangiarmi io.

Mettiamola più semplice, così non ci si incasina con la storia degli occhiali 3D:
Supponiamo che io voglia far accendere e spegnere un led alla stessa frequenza di aggiornamento dello schermo del mio portatile, io non riesco a fare questo.
ci penso io poi a prendere l'impulso del led e a girarlo per mandare un segnale ir agli occhiali.

Il software è semplice se si è un programmatore con molti anni di esperienza ]:smiley:

Lascia perdere l'idea di scriverlo da solo, dalle domande che fai non sei del settore. Ti propongo una strada alternativa più alla tua portata:
Girando un potenziometro sincronizzi manualmente gli occhiali 3d, la frequenza del tuo schermo è sempre quella (60hz), col potenziometro diciamo che anticipi o ritardi la frequenza per allinearla a quella dello schermo.
Non sarà il massimo ma girando lentamente il potenziometro è possibile, con gli occhialini addosso, trovare un buon risultato.
Ora devi solamente aggiungere un potenziometro al tuo progetto e scrivere lo sketch di Arduino.

Ciao

Si è vero non sono troppo del settore, e sono mooolto auto didatta :roll_eyes: .
Il problema del sincronizzare manualmente degli occhiali con il monitor e che non ci si riesce ( lo dico con cognizione di causa )
rimane in sincrono si e no per 1 secondo.
Potrei prendere il segnale direttamente dalla porta VGA, farlo entrare in arduino e da li mandarlo agli occhiali.
Ma da quello che ho letto anche cosi non sarebbe troppo preciso e poi non ho la porta VGA .
Io vorrei provare a fare il programma da me ma oviametne non ne sono in grado. =(
te riusciresti a farlo se ti spiego nel detaglio come si comunica agli ochiali ?

Perché rimane in sincrono per 1 secondo massimo secondo te con una regolazione manuale?
Comunque avrai un uscita video VGA o DVI sul tuo pc?
Altrimenti potresti comunque prelevare il segnale con un cavo "vga splitter", una multipla in pratica dove puoi collegare sia lo schermo che Arduino.

Ciao

PS: Naturalmente non ti puoi agganciare semplicemente al pin VSYNC così com'è senza sapere bene quello che stai facendo a meno che non vuoi distruggere la scheda video e il monitor in un colpo solo ]:smiley: