Delphi 6: Может ли собственный Delphi создавать плавную графику, такую ​​как Flash?

У меня есть собственный TFrame Delphi, который имитирует программу просмотра облака тегов Cumulus от Роя Танка, плагин WordPress Flash. Этот плагин создает трехмерную сферу слов, которая вращается на поверхности «виртуальной» сферы. Вы можете увидеть это в действии здесь:

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

В моей структуре приложения каждое слово имеет свой собственный TBitmap, и для рендеринга сферы я распечатываю все растровые изображения слова во временный TBitmap, а затем BitBlt (), который временный TBitmap на Canvas видимого TPaintBox. Операция рендеринга происходит по событию таймера TTimer, которое происходит каждые 50 миллисекунд.

Однако, как бы я ни старался, есть заметное "дрожание" в движении слов, особенно по сравнению с шелковистым плавным движением текста Flash-плеер. Я подумал, что может помочь увеличение частоты кадров, и даже попытался использовать мультимедийный таймер, который обновляется каждые 10 миллисекунд с правильной блокировкой и разблокировкой всех холстов из-за многопоточной природы таймера MM. Все еще нервничает. Единственное, что я могу понять, это то, что мои вычисления приводят к дискретным местоположениям пикселей для каждого слова, которое нужно отрисовать, и это вызывает дрожание. Напротив, и это предположение, возможно, Flash потенциально выполняет дизеринг для облегчения рендеринга «между пикселями» или, возможно, выполняет сглаживание в реальном времени и что s почему он не дрожит?

В любом случае, можно ли получить шелковисто-плавное движение, которое я ищу, используя собственный код Delphi? Или единственный способ сделать это - перейти к чему-то вроде решения Direct3D или OpenGL? Я не хочу тратить время на доводку этой штуки до смерти, если это проигрышная битва. С другой стороны, если у вас есть какие-то советы, я бы хотел их услышать. Я предполагаю, что если мне придется пойти по маршруту Direct3D / OpenGL, это большая работа и кривая обучения, поэтому, если бы я мог найти способ сделать это в собственном коде Delphi, мне бы это понравилось.

ПОСЛЕДУЮЩИЕ ДЕЙСТВИЯ РЕДАКТИРОВАТЬ : Поможет ли печать на более крупном «виртуальном» растровом изображении с последующим использованием метода передискретизации, подобного приведенному здесь, для печати «вниз» до фактического видимого холста ?:

Как правильно масштабировать изображение в Delphi?

5
задан Community 23 May 2017 в 09:58
поделиться