Delphi 6:原生Delphi可以像Flash一样做出流畅的图形吗?

Rob*_*ler 5 delphi flash canvas smooth

我有一个原生的Delphi TFrame模仿Roy Tanck的Cumulus Tag Cloud查看器,一个WordPress Flash插件.插件的作用是创建一个在"虚拟"球体表面旋转的三维球体.你可以在这里看到它:

http://www.roytanck.com/2008/03/06/wordpress-plugin-wp-cumulus-flash-based-tag-cloud/

在我的应用程序结构中,每个单词都有自己的TBitmap,并且渲染球体我将所有单词的位图打印到临时TBitmap,然后将BitBlt()临时TBitmap打印到可见TPaintBox的Canvas上.渲染操作发生在每50毫秒发生一次的TTimer定时器事件上.

然而,无论我怎么努力,对于单词的运动都有一个明显的"抖动",特别是与Flash播放器的柔滑平滑运动相比.我认为提高帧速率可能有所帮助,我甚至尝试使用多媒体定时器,由于MM定时器的多线程性质,所有画布的正确锁定和解锁每10毫秒更新一次.仍然紧张不安.我唯一可以想到的是,我所做的计算会导致每个字的离散像素位置被渲染,并导致抖动.相反,这是假设,也许Flash可能会抖动以促进"像素之间"渲染,或者可能实时消除锯齿,这就是为什么它不抖动?

在任何情况下,是否有可能使用本机Delphi代码获得我想要的丝般平滑运动?或者唯一的方法是直接使用Direct3D或OpenGL解决方案?如果这是一场失败的战斗,我不想浪费时间将这件事情调整为死亡.另一方面,如果你有任何提示,我很乐意听到它们.我的猜测是,如果我必须去Direct3D/OpenGL路线,这是一个很大的工作和学习曲线,所以如果我能找到一种方法来完成本机Delphi代码,我会喜欢它.

后续编辑:打印到更大的"虚拟"位图然后使用这里给出的重采样方法有助于将"向下"打印到实际可见的Canvas?:

在Delphi中很好地缩放图像?

Ler*_*erc 2

我用 Delphi 编写了许多游戏。这当然是可行的。有很多事情需要注意。

您不仅必须定期触发事件,还必须检查事件到达的时间,并根据轮询时间进行移动,而不是根据预期的等待时间来假设时间。

如果需要不依赖 GPU 的亚像素精度,我会推荐Antigrain Geometry或它的 Pascal 兄弟AGGPAS for Delphi。

动画字体可能还有一个额外的问题,因为字体渲染通常包含确保细笔画出现在像素边界上的逻辑。移动以这种方式呈现的文本可能会改变外观,因为不同的笔画可以从与一个像素对齐跳到下一个像素。

如果字体渲染为像素对齐,那么将渲染量化为整数可能会更好。它仍然会与像素对齐,但通过一次移动一个像素应该可以使其每次都保持一致。