Newsgroup: it.comp.java
Titolo: Problema di sincronia con la grafica

Avevo mandato un po di tempo fa delle domande sul funzionamento della classe
graph, ma nessuno era stato in grado di rispondermi, spero che a distanza di
un po di tempo sia comparso qualcuno che possa darmi una mano.
Il mio problema riguarda la visualizzazione di una scena tridimensionale
all'interno di una finesta
Per esguire questa operazione devo effettuare il calcolo delle proiezioni
per trovare i punti da visualizzare e proiettarli cercando di mantenere un
frame rate piuttosto elevato.
Le opearazioni che ho compiuto con il mio algoritmo sono state
Durante la inizializzazione della classe:
1 Creo una immagine della dimensione della finestra per poter sfruttare il
double buffering
Durante la scrittura del buffer:
1 cancello la scena precedente con un rettangolo bianco
2 traccio tutte le linee
3 incollo il buffer sulla finestra
Sembrerebbe che queste siano le operazioni di base per sfruttare il double
buffering, se non che Java abbia il piccolo difetto di sfruttare troppo il
parallelismo.
Il problema sta nel fatto che il buffer viene incollato alla finestra ancora
prima che sia terminato il tracciamento delle righe.. vi lascio immaginare
che l'effetto flickering si veda senza problemi, e che a seconda del numero
di processi che girano sul sistema contemporaneamente questo effetto aumenti
o diminuisca.
Quello che vi chiedo è se esiste un qualche metodo per attendere che la
graph abbia finito di disegnare sul buffer prima di proiettarlo nella
finestra..
Ho provato ad estendere la classe graph, ma quello che ne risulta è una
classe non instanziabile, poichè alcune funzioni sono abstract e non so
proprio come implementarle.. avete qualche soluzione alternativa??
--
Home page: 
http://pasteur.3000.it
Mirror: 
http://www.fortunecity.it/olimpico/pallavolo/6/index.html
Standard mail: 
mac_p...@hotmail.com
Fast mail (for little mail only) : 
bul...@wappi.com
Icq number :: 14165006

Non credo che nessuno sia stato in grado di risponderti..
Io mi sono avvicinato al java da 3 mesi... Bohh..
Prova MediaTraker....
MediaTracker tracker;
tracker = new MediaTracker(this);
tracker.addImage( immagine,0);
if((tracker.statusID(0, true) & 0x8) == 0)
 {
/* Sto' creando l' immagine */
          try
            {
                tracker.waitForID(0);
            }
            catch(InterruptedException _ex) { }


 proprio come implementarle.. avete qualche soluzione alternativa??
Scusami ma non ti conviene usare "OpenGL for Java"? Risolvi il problema del
flickering ed inoltre non sei costretto ad implementare un motore 3D da zero
(non metto in discussione la tua abilita' di programmatore, pero' OpenGL e'
sicuramente + affidabile in termini di velocità e qualita' degli algoritmi).
Ciao, Leo.

 > proprio come implementarle.. avete qualche soluzione alternativa??
Io ho provato a fare una cosa simile alla tua e ho risolto perfettamente il
flick! Creati una Image. Usa da essa il metodo getGraphics() per ricavarne
il contesto grafico. Ora avrai quindi un nuovo oggetto di tipo Graphics. Su
di esso disegna con drawImage(immagine,x,y,null). Quel null che vedi ti
permette di creare l'immagine in memoria senza ancora visualizzarla. Quando
hai finito, disegnala sullo schermo con g.drawImage(immagine,x,y,this). Quel
g che ti indico ora non è più il graphics che hai ricavato prima, ma è
quello del metodo paint del componente nel quale vuoi disegnare l'immagine!
Se hai problemi, ripostami che ti invio un programma d'esempio!