私は、RoyTanckのCumulusTagCloudビューアであるWordPressFlashプラグインをエミュレートするネイティブDelphiTFrameを持っています。そのプラグインが行うことは、「仮想」球の表面上で回転する単語の3D球を作成することです。ここで実際の動作を確認できます。
http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/
私のアプリケーション構造では、各単語に独自のTBitmapがあり、球をレンダリングするために、すべての単語のビットマップを一時的なTBitmapに出力し、次にその一時的なTBitmapを表示されているTPaintBoxのキャンバスにBitBlt()します。レンダリング操作は、50ミリ秒ごとに発生するTTimerタイマーイベントで発生します。
しかし、どんなに一生懸命頑張っても、特にFlashプレーヤーの滑らかで滑らかな動きと比較すると、単語の動きには目立った「ジッター」があります。フレームレートを上げると役立つかもしれないと思い、MMタイマーのマルチスレッドの性質により、すべてのキャンバスを適切にロックおよびロック解除して10ミリ秒ごとに更新されるマルチメディアタイマーを使用してみました。まだぎくしゃくしている。私が理解できる唯一のことは、私が行う計算では、レンダリングする単語ごとに個別のピクセル位置が得られ、それがジッターを引き起こすということです。対照的に、これは想定ですが、おそらくFlashは「ピクセル間」レンダリングを容易にするためにディザリングを行う可能性があります。または、リアルタイムでアンチエイリアシングを行う可能性があります。そのため、ジッターは発生しません。
いずれにせよ、ネイティブのDelphiコードを使用して、私が探している絹のような滑らかな動きを得ることができますか?それとも、Direct3DやOpenGLソリューションのようなものに完全に移行することが唯一の方法ですか?それが敗戦であるならば、私はこれを死ぬまで微調整する時間を無駄にしたくありません。一方で、何かアドバイスがあれば聞いてみたいです。私の推測では、Direct3D / OpenGLルートを使用する必要がある場合、それは大きな仕事であり、学習曲線であるため、ネイティブのDelphiコードでこれを実行する方法を見つけることができればそれが大好きです。
フォローアップ編集:はるかに大きな「仮想」ビットマップに印刷してから、ここに示すようなリサンプリング方法を使用すると、実際に表示されるキャンバスに「下」に印刷するのに役立ちますか?: