Pages: 1 [2] 3 4   Go Down
Author Topic: Gestire video 3D  (Read 3985 times)
0 Members and 1 Guest are viewing this topic.
Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2416
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:

Code:
       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
« Last Edit: March 15, 2013, 09:57:31 am by flz47655 » Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Quote
voglio intercettare la frequenza di aggiornamento del monitor per sincronizzarci gli occhiali
allora usa il sistema della VGA

tu forse intendi

Quote
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?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao flz47655 grazie 1000 per la risposta e del codice fornito.  smiley
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'
« Last Edit: March 15, 2013, 10:32:12 am by mango » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: March 15, 2013, 10:53:32 am by mango » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2416
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Il software è semplice se si è un programmatore con molti anni di esperienza  smiley-twist

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
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si è vero non sono troppo del settore, e sono mooolto auto didatta  smiley-roll .
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.  smiley-cry
te riusciresti a farlo se ti spiego nel detaglio come si comunica agli ochiali ?
Logged

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2416
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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-twist
« Last Edit: March 15, 2013, 12:19:23 pm by flz47655 » Logged

0
Offline Offline
Shannon Member
****
Karma: 132
Posts: 10498
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

perchè secondo te rilevare l'aggiornamento via SW, inviarlo via seriale (massimo circa 100.000 caratteri al secondo, quindi 0.00001secondo a carattere) + elaborarlo lato arduino+inviare il segnale + elaborazione occhiale...

se prendo il dato da VGA via interrupt e attivi un pin siamo nell'ordine dei nanosecondi
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho seguito altri progetti di questo genere che non usavano arduino ma cip logici, in pratica prendevano il segnale di clock dalla porta vga.
Il problema di sincronizzare il segnale con un potenziometro è il potenziometro stesso, e la precisione che ovviamente non è a questi livelli.
qui vi linko 2 proggetti analoghi :
http://www.benryves.com/journal/tags/LCD_shutter_glasses_adaptor
http://codelab.wordpress.com/2012/03/02/vsync-driven-shutter-glasses/
Qui di seguito inserisco il programma fatto fino ad ora che prende il clock dalla porta VGA ( se già avete suggerimenti su come migliorarlo o renderlo più efficente )

Code:
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 di clock VGA
  pinMode (9, INPUT);     // interutore 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);
  }

}
Logged

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2416
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Il problema di sincronizzare il segnale con un potenziometro è il potenziometro stesso, e la precisione che ovviamente non è a questi livelli

Dipende da come si implementa il tutto, con Arduino leggi il valore del potenziometro e quando trovi il valore corretto lo "blocchi" in modo che non si sposta neanche se si gira il potenziometro

Potresti implementare alcuni accorgimenti per avere due o più modalità "fine" e "grossa" con diverse sensibilità per tarare meglio il tutto, alla fine il potenziometro in se non deve essere precisissimo, potresti addirittura fare senza potenziometro e variare in continuazione lentamente lo sfasamento, quando vedi bene vuol dire che hai trovare il sincronismo giusto e con un pulsante che leggi tramite Arduino lo "blocchi"

Ciao
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 134
Posts: 9686
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Dipende da come si implementa il tutto, con Arduino leggi il valore del potenziometro e quando trovi il valore corretto lo "blocchi" in modo che non si sposta neanche se si gira il potenziometro

Non può funzionare in questo modo perché il V-sync ha sempre un pochino di jitter e non è raro che ci sono delle leggere pause, anche di qualche decina di us, tra due frame consecutivi, il video ti rimane stabile per poco tempo poi l'immagine comincia a scorrere verticalmente per la perdita del sincronismo.
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Mi dispiace ma ho già letto di gente che ha provato con scarsi risultati.
Per quanto riguarda il world clock ho un po di esperienza, a lavoro uso complesse schede audio che devono essere sincronizzate da un macchinario apposito ( master clock ).
Io pensavo di usare appunto la frequenza della scheda video come master clock cosi che anche il plughin per VLC ( in fase di progettazione ( non da me  smiley-lol ) ) possa sincronizzarsi alla stessa frequenza e alternare i fotogrammi.
Percui diciamo che è esenziale che si sincronizi corettamente con la frequenza di agiornamento video.
Logged

Parma
Offline Offline
Edison Member
*
Karma: 21
Posts: 2416
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Andrebbe sincronizzato in continuazione in effetti...
Anch'io sono per la strada del segnale di VSYNC della VGA, viene una cosa molto migliore
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 31
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si anche io ma non ho possibilita di ottenerlo :-( il programmino che ho critto qui su teoricamente lo prende da li, ma sono convinto che ai vostri occhi esperti ho scritto il peggio codice del mondo.
Ma proprio non ce modo di otenerlo anche dalla porta usb?
Logged

Pages: 1 [2] 3 4   Go Up
Jump to: