J'ai un TFrame Delphi natif qui émule la visionneuse Cumulus Tag Cloud de Roy Tanck, un plug-in Flash WordPress. Ce que fait ce plug-in est de créer une sphère de mots 3D qui tournent sur la surface d'une sphère "virtuelle". Vous pouvez le voir en action ici:Delphi 6: Delphi natif peut-il créer des graphiques fluides comme Flash?
http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/
Dans ma structure d'application chaque mot a son propre TBitmap et de rendre la sphère imprimer à un TBitmap temporaire tous les bitmaps est le mot, puis BitBlt() que TBitmap temporaire sur le Canvas d'un TPaintBox visible. L'opération de rendu se produit sur un événement de temporisateur TTimer qui se produit toutes les 50 millisecondes.
Cependant, peu importe combien j'essaie, il y a une "gigue" notable dans le mouvement des mots, en particulier par rapport au mouvement doux et soyeux du lecteur Flash. Je pensais que l'augmentation de la fréquence d'images pouvait aider et j'ai même essayé d'utiliser un minuteur multimédia mis à jour toutes les 10 millisecondes avec un verrouillage et un déverrouillage corrects de tous les Canvas en raison de la nature multithread du MM timer. Toujours nerveux. La seule chose que je peux comprendre est que les calculs que je fais aboutissent à des emplacements de pixels discrets pour chaque mot à restituer et qui provoquent la gigue. En revanche, et c'est une supposition, peut-être que Flash fait un tramage pour faciliter le rendu "entre pixels" ou peut-être l'anti-aliasing en temps réel et c'est pourquoi ça ne gigue pas?
Dans tous les cas, est-il possible d'obtenir le mouvement soyeux que je recherche en utilisant le code Delphi natif? Ou est-ce que la seule façon de le faire est d'aller jusqu'à quelque chose comme une solution Direct3D ou OpenGL? Je ne veux pas perdre de temps à peaufiner cette chose à mort si c'est une bataille perdue. D'un autre côté, si vous avez des conseils, j'aimerais les entendre. Je suppose que si je dois aller sur la route Direct3D/OpenGL c'est un gros travail et une courbe d'apprentissage, donc si je pouvais trouver un moyen de faire cela en code Delphi natif, j'aimerais beaucoup.
SUIVI EDIT: Est-ce l'impression d'une image bitmap « virtuelle » beaucoup plus grande et en utilisant une méthode de ré-échantillonnage comme celle donnée ici l'aide d'imprimer « vers le bas » au visible en toile ?: réelle
Scale an image nicely in Delphi?
Avez-vous sur DoubleBuffering, AllPaintingInWmPaint, SupportsTransparentBackColor et UserPaint? En les utilisant lorsque vous effectuez un rendu GDI sur un formulaire, vous évitez les scintillements. – Nowayz
Nowayz. Je n'ai pas de scintillement. La gigue est positionnelle, pas due à des repeints. –
La réponse est définitivement oui. Mais si vous voulez des graphismes 3D vraiment fluides, le CPU n'est pas assez rapide. Vous devez utiliser le GPU, en utilisant OpenGL. –