Possiedo un Delphi TFrame nativo che emula il visualizzatore Cumulus Tag Cloud di Roy Tanck, un plug-in per WordPress Flash. Ciò che fa questo plug-in è creare una sfera di parole 3D che gira sulla superficie di una sfera "virtuale". Potete vederlo in azione qui:Delphi 6: Delphi nativo può eseguire una grafica liscia come Flash?
http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/
Nella mia struttura dell'applicazione ogni parola ha il suo TBitmap e di rendere la sfera si stampa tutte le bitmap della parola ad un TBitmap temporanea e poi BitBlt() che TBitmap temporanea sulla tela di un TPaintBox visibile. L'operazione di rendering si verifica su un evento del timer TTimer che si verifica ogni 50 millisecondi.
Tuttavia, non importa quanto io provi ci sia un notevole "jitter" al movimento delle parole, specialmente in confronto al movimento morbido e setoso del lettore Flash. Ho pensato che l'aumento della frequenza dei fotogrammi potrebbe essere d'aiuto e ho persino provato a utilizzare un timer multimediale aggiornato ogni 10 millisecondi con il blocco e lo sblocco appropriati di tutte le tele a causa della natura multithread del timer MM. Ancora nervoso. L'unica cosa che posso capire è che i calcoli che faccio risultano in posizioni di pixel discrete per ogni parola da rendere e che causa jitter. Al contrario, e questa è supposizione, forse Flash potenzialmente fa il dithering per facilitare il rendering "tra pixel" o forse fa l'anti-aliasing in tempo reale ed è per questo che non fa jitter?
In ogni caso, è possibile ottenere il movimento fluido come la seta che sto cercando utilizzando il codice Delphi nativo? O l'unico modo per farlo è arrivare fino a qualcosa come una soluzione Direct3D o OpenGL? Non voglio perdere tempo a mettere a punto questa cosa a morte se si tratta di una battaglia persa. D'altra parte, se hai qualche consiglio mi piacerebbe ascoltarli. La mia ipotesi è che se devo seguire la rotta Direct3D/OpenGL è un grosso lavoro e una curva di apprendimento, quindi se potessi trovare un modo per farlo nel codice nativo di Delphi mi piacerebbe molto.
FOLLOW-UP EDIT: Sarebbe stampa su una molto più grande bitmap "virtuale" e poi, utilizzando un metodo di ricampionamento come quella data qui di aiuto per la stampa "giù" per l'attuale Canvas visibile ?:
Scale an image nicely in Delphi?
Avete in DoubleBuffering, AllPaintingInWmPaint, SupportsTransparentBackColor e UserPaint? L'utilizzo di questi quando si esegue il rendering GDI su un modulo impedirà lo sfarfallio. – Nowayz
Nowayz. Non ho lo sfarfallio. Il jitter è posizionale, non dovuto a ridisegni. –
La risposta è sicuramente si. Ma se vuoi una grafica 3D davvero liscia, la CPU non è abbastanza veloce. Devi usare la GPU, usando OpenGL. –