У меня есть собственный Delphi TFrame, который имитирует программу просмотра облака тегов Cumulus Tag Cloud, плагин 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 потенциально выполняет дизеринг для облегчения рендеринга «между пикселями» или, может быть, сглаживание в реальном времени, и поэтому он не дрожит?
В любом случае, можно ли получить шелковисто-плавное движение, которое я ищу, используя собственный код Delphi? Или единственный способ сделать это - полностью перейти к чему-то вроде решения Direct3D или OpenGL? Я не хочу тратить время на доводку этой штуки до смерти, если это проигрышная битва. С другой стороны, если у вас есть какие-нибудь советы, я бы хотел их услышать. Я предполагаю, что если мне придется пойти по маршруту Direct3D / OpenGL, это большая работа и кривая обучения, поэтому, если бы я мог найти способ сделать это в собственном коде Delphi, мне бы это понравилось.
ПОСЛЕДУЮЩЕЕ РЕДАКТИРОВАНИЕ: будет ли печать на гораздо более крупном «виртуальном» растровом изображении с последующим использованием метода передискретизации, подобного приведенному здесь, помочь распечатать «вниз» до фактического видимого холста ?: